1. 程式人生 > >[劍指offer]醜數

[劍指offer]醜數

在這裡插入圖片描述
思路:
一個醜數只有因子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); } }