题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解体思路:
1.丑数定义:百度百科
2.所谓丑数,就是那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
4.对小于N的整数不断进行遍历。将其分为因子包含2.3.5的三类丑数。
5.对丑数排序,按由小到大的顺序排序。
实际操作:
public int GetUglyNumber_Solution(int index) {
//丑数定义:所谓丑数,就是那些因子只含2,3,5的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
//思路:丑数可以由另外一个丑数乘以2,3或者5得到
//特殊情况
if (index == 0) return 0;
if (index <= 5) return index;
int[] array=new int [index];
//列出整数1~5,减少循环
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
int temp=0;
int uglyNum2=0,uglyNum3=0,uglyNum5=0;
//从丑数6开始遍历
for (int i = 5; i < index; i++) {
//包含因子2的丑数,且大于已知最大丑数
for (int j = 0; j < i; j++) {
temp=array[j]*2;
if (temp>array[i-1]) {
uglyNum2=temp;
break;
}
}
//包含因子3的丑数,且大于已知最大丑数
for (int j = 0;j<i; j++) {
temp=array[j]*3;
if (temp>array[i-1]) {
uglyNum3=temp;
break;
}
}
//包含因子5的丑数,且大于已知最大丑数
for (int j = 0;j<i; j++) {
temp=array[j]*5;
if (temp>array[i-1]) {
uglyNum5=temp;
break;
}
}
//对丑数进行排序
int[] newArray={uglyNum2,uglyNum3,uglyNum5};
Arrays.sort(newArray);
//按从小到大的顺序给array[i]赋值
array[i]=newArray[0];
}
//返回丑数值
return array[index-1];
}