思路:
一个丑数只有因子2,3,5,那么一个丑数一定由另一个丑数乘以2,3,5得到。那么从1开始乘以2,3,5,就得到2,3,5,从2,3,5开始乘以2,3,5,分别得到4,6,10,6,9,10,10,15,25九个丑数。但是此序列是无序且有重复的。这里判断乘以2,3,5一次之后最小的数,将此最小的数加入list容器中,如果此最小的数等于乘以2,3,5之后的任一数,就将此数对应的2或3或5的变量加1,意思即之后从下一个丑数开始乘2,3,5。我们只用比较3个数:用于乘2的最小的数、用于乘3的最小的数,用于乘5的最小的数。
实现:
import java.util.ArrayList;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if( index <= 0 ) return 0;
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
int i2 = 0,i3 = 0, i5 = 0;
while( list.size() < index ){
int m2 = list.get(i2) * 2 ;
int m3 = list.get(i3) * 3 ;
int m5 = list.get(i5) * 5 ;
int min = Math.min( m2, Math.min( m3,m5 ) ) ;
list.add(min);
if( min == m2 ) i2++ ;
if( min == m3 ) i3++ ;
if( min == m5 ) i5++ ;
}
return list.get(list.size()-1);
}
}