题目
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解题思路
丑数都是由2、3、5相乘得来的;之前的丑数*(2、3、5)所能得到的最小值即为新的丑数。
例如:第一个丑数是1,第一个丑数 *(2、3、5)中最小的2,即为新的丑数,即第二个丑数。
第一步:使用一个数组保存丑数,3个元素保存2、3、5所乘能得到的最小值的下标
第二步:找出2、3、5乘丑数序列所得到的最小值
第三步:得到最小值的下标+1
代码如下
import java.util.*;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if (index == 0) return 0;
int[] getUglyNumber = new int[index];
getUglyNumber[0] = 1;
int nums[] = new int[3];
for (int i = 1; i < index; i++) {
getUglyNumber[i] = Math.min(
Math.min(getUglyNumber[nums[0]] * 2, getUglyNumber[nums[1]] * 3),
getUglyNumber[nums[2]] * 5);
if (getUglyNumber[nums[0]] * 2 == getUglyNumber[i]) {
nums[0]++;
}
if (getUglyNumber[nums[1]] * 3 == getUglyNumber[i]) {
nums[1]++;
}
if ( getUglyNumber[nums[2]] * 5 == getUglyNumber[i]) {
nums[2]++;
}
}
return getUglyNumber[index-1];
}
}