题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
题目链接: link.
解题思路
这儿给出动态规划的解题思路。链接: link.
代码块
1、采用动态规划的解题思路。
public class Solution {
public static int GetUglyNumber_Solution(int index) {
if(index<7)
return index;
int[] arr=new int[index];
int p2=0,p3=0,p5=0;
arr[0]=1;
// Vector<Integer> v=new Vector<Integer>();
for(int i=1;i<index;i++) {
arr[i]=Math.min(arr[p2]*2,Math.min(arr[p3]*3, arr[p5]*5));
if(arr[p2]*2==arr[i]) p2++;
if(arr[p3]*3==arr[i]) p3++;
if(arr[p5]*5==arr[i]) p5++;
}
return arr[index-1];
}
}
2、采用递归的解题思路,不过会有超时。
public class Solution {
public static int GetUglyNumber_Solution(int index) {
int count=0;
int i=1;
while((count)!=index) {
if(ugly_Number(i)) {
count++;
System.out.println(i);
}
i++;
}
return i-1;
}
public static boolean ugly_Number(int index) {
if(index==1 || index==2 || index==3 || index==5) {
return true;
}
if(index%2==0) {
return ugly_Number(index/2);
}
if(index%3==0) {
return ugly_Number(index/3);
}
if(index%5==0) {
return ugly_Number(index/5);
}
return false;
}
public static void main(String[] args) {
System.out.println(ugly_Number(11));
System.out.println(GetUglyNumber_Solution(10));
}
}