剑指Offer33:丑数
Posted blog-cpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer33:丑数相关的知识,希望对你有一定的参考价值。
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
题解:
1 //所有的丑数分为三种类型 2*i,3*i,5*i ,其中 i是数组中的元素,一开始只有1 2 public static int GetUglyNumber_Solution(int index) { 3 // 0-6的丑数分别为0-6 4 if(index<7) { 5 return index; 6 } 7 int[] ugly = new int[index]; 8 ugly[0]=1; 9 //初始化三个指向三个潜在成为最小丑数的位置 10 int t2=0,t3=0,t5=0; 11 for(int i=1;i<index;i++) { 12 //选出三个队列头最小的数 13 ugly[i]= Math.min(Math.min(ugly[t2] * 2, ugly[t3] * 3), ugly[t5] * 5); 14 //这三个if有可能进入一个或者多个,进入多个是三个队列头最小的数有多个的情况 15 if(ugly[i] == ugly[t2]*2){ 16 t2++; 17 } 18 if(ugly[i] == ugly[t3]*3) { 19 t3++; 20 } 21 if(ugly[i] == ugly[t5]*5) { 22 t5++; 23 } 24 } 25 return ugly[index-1]; 26 }
测试:
1 public static void main(String[] args) { 2 int index=11; 3 int i = GetUglyNumber_Solution(index); 4 System.out.print("第"+index+"位数字为:"); 5 System.out.println(i); 6 } 7 输出: 8 第11位数字为:15
以上是关于剑指Offer33:丑数的主要内容,如果未能解决你的问题,请参考以下文章