《劍指offer》系列 醜數(Java)
阿新 • • 發佈:2018-11-25
連結
牛客:醜數
題目描述
把只包含質因子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); } }