天天看點

劍指offer打卡|醜數

題目描述

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

代碼

public class Solution {
    public int GetUglyNumber_Solution(int index) {
        if(index<=0){
            return 0;
        }
        //用三個指針來記錄目前乘2 3 5的最小值
        int i2=0,i3=0,i5=0;
        int[] nums=new int[index];
        nums[0]=1;
        for(int i=1;i<index;i++){
            int cheng2=nums[i2]*2,cheng3=nums[i3]*3,cheng5=nums[i5]*5;
            nums[i]=Math.min(cheng2,Math.min(cheng3,cheng5));
            if(nums[i]==cheng2){
                i2++;
            }
            if(nums[i]==cheng3){
                i3++;
            }
            if(nums[i]==cheng5){
                i5++;
            }
        }
        return nums[index-1];
    }
}