1. 题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
2. 解题思路
(1)本题的思路最好反过来思考就好,不要想着给出一个数然后求它所有的因子。因为我们知道所有的质因子了,所有可以用质因子求出所有的丑数即可。
3. 代码实现
(1)
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index <= 0)
return 0;
int[] arr = new int[index];
arr[0] = 1;
int multiply2 = 0;
int multiply3 = 0;
int multiply5 = 0;
for(int i = 1; i < index; i++){
int min = Math.min(arr[multiply2]*2, Math.min(arr[multiply3]*3, arr[multiply5]*5));
arr[i] = min;
if(arr[multiply2]*2 == min)
multiply2++;
if(arr[multiply3]*3 == min)
multiply3++;
if(arr[multiply5]*5 == min)
multiply5++;
}
return arr[index-1];
}
}