题目:丑数
题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解题思路:
根据丑树的定义,丑树应该是另一个丑数乘以2,3或者5的结果(1除外)。因此我们创建一个数组,里面的数字是排好序的丑数,每一个丑树都是前面的丑树乘以2,3或者5得到的。
怎样确保数组中的丑树是排好序的?
我们只需要记下这个丑数的位置,同时每次生成新的丑数的时候,更新此时所对应的最小的那个值,并且进行下标的更新。
代码实现:
public class Solution {
public int GetUglyNumber_Solution(int index) {
//代码的鲁棒性
if(index==0) {
return 0;
}
//定义一个数组来存储index个丑数
int [] arr=new int[index];
//第一个丑树是1
arr[0]=1;
//定义三个指针
int mutiply2=0;
int mutiply3=0;
int mutiply5=0;
for(int i=1;i<arr.length;i++) {
//找到三个中的最小值
int num1=arr[mutiply2]*2;
int num2=arr[mutiply3]*3;
int num3=arr[mutiply5]*5;
int min=Math.min(num1, Math.min(num2, num3));
//将最小值赋给此时的下角标对应的位置
arr[i]=min;
//如果此时的角标的值等于最小值,那个角标进行++
if(arr[i]==num1) {
mutiply2++;
}
if(arr[i]==num2) {
mutiply3++;
}
if(arr[i]==num3) {
mutiply5++;
}
}
//返回第index个元素
return arr[index-1];
}
}