[劍指offer]醜數
阿新 • • 發佈:2018-12-16
思路:
一個醜數只有因子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);
}
}