/**
这个三指针法是在评论区看到的
但具体不知道是何方神圣想出来的
这个方法实在是太妙了!!!!!!!!
*/
三指针法
三指针每个代表2,3,5
但是三个指针指向的数,代表这个数乘以相应的235还未被录入数组中,所以指针一直停在这个数,知道被录入后,这个指针加1
初始数组num[0] = 1;
index5,index2,index3均指向nums【0】
Math.min(uglynums[index_2]*2, Math.min(uglynums[index_3]*3, uglynums[index_5]*5));
找到最小值,录入数组中,被录入数组的指针相应加1.
三指针的好处(利用三个if判断,去除重复的情况,重复的那个指针也加1,这样数组中不会出现重复的值)
class Solution {
public int nthUglyNumber(int n) {
int[] uglynums = new int[n];
int index_2 = 0, index_3 = 0, index_5 = 0;
uglynums[0] = 1;
int i;
for(i = 1; i<n; i++){
uglynums[i] = Math.min(uglynums[index_2]*2, Math.min(uglynums[index_3]*3, uglynums[index_5]*5));
if(uglynums[i] == uglynums[index_2]*2) index_2++;
if(uglynums[i] == uglynums[index_3]*3) index_3++;
if(uglynums[i] == uglynums[index_5]*5) index_5++;
}
return uglynums[n-1];
}
}