题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:结果必然是由2,3,5组成,直接看代码:
import java.util.ArrayList;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index>0){
ArrayList<Integer> list = new ArrayList();
list.add(1);//第一个丑数
int i2 = 0,i3 = 0,i5 = 0;//分别代表2,3,5对应的下标
while(list.size()<index){
int n = list.get(i2)*2;//从集合中取出对应的值和2做乘法,保证得到的结果由2,3,5组成
int m = list.get(i3)*3;
int p = list.get(i5)*5;
int temp = min(n,min(m,p));//取最小值
if(temp == n){
i2++;
}//注意这里不能用else if,因为要去重
if(temp == m){
i3++;
}
if(temp == p){
i5++;
}
list.add(temp);
}
return list.get(list.size()-1);
}
return 0;
}
public int min(int x,int y){
return x>y?y:x;
}
}