1. 程式人生 > >《劍指offer》系列 醜數(Java)

《劍指offer》系列 醜數(Java)

連結

牛客:醜數

題目描述

把只包含質因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。

思路

醜叔一定是2 3 或是 5的倍數 i2 i3 i5當做他們係數的下標,從0開始 就是說i為0 時 對應的數值m2為2 這是為了方便放在列表中根據i下標提取 假設2的倍數最小 然後放入列表 下標加1 依次計算

程式碼

import java.util.ArrayList;
public class Solution {

    public int GetUglyNumber_Solution(int n) {
    	if(n <= 0)
            return 0;
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1);
        int i2 = 0, i3 = 0, i5 = 0;
        while(list.size() < n)//迴圈的條件
        {
        	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);
    }
}