LeetCode—醜數(暴力)+醜數Ⅱ(動態規劃)

醜數(簡單)

2020年6月10日

題目來源:力扣

在這裏插入圖片描述

解題

  • 暴力

醜數=2xX3yX5Z,除以這些數,是醜數的最後肯定爲1

class Solution {
    public boolean isUgly(int num) {
        if(num<=0) 
            return false;
        while(num%2==0 || num%3==0 || num%5==0){
            if(num%2==0) num/=2;
            if(num%3==0) num/=3;
            if(num%5==0) num/=5;
        }
        return num==1;
    }
}

在這裏插入圖片描述

醜數Ⅱ(中等)

2020年6月10日

題目來源:力扣

在這裏插入圖片描述
解題

  • 動態規劃

有數組本身的i指針,有i2指針代表乘2、i3指針代表乘3、i5指針代表乘5

一開始所有的指針都指向num[0]
在這裏插入圖片描述
對i2、i3、i5進行對應的乘操作,看看哪個數最小,毫無疑問是2最小,那麼i2指針向後一位
在這裏插入圖片描述
繼續比較,這次是i3最小,i3向後一位
在這裏插入圖片描述
由此遞推

class Solution {
    public int nthUglyNumber(int n) {
        int[] num=new int[1691];
        int i2=0,i3=0,i5=0;
        int ugly;
        num[0]=1;
        for(int i=1;i<n;i++){
            ugly=Math.min(Math.min(num[i2]*2,num[i3]*3),num[i5]*5);
            num[i]=ugly;

            if(ugly==num[i2]*2) ++i2;
            if(ugly==num[i3]*3) ++i3;
            if(ugly==num[i5]*5) ++i5;
        }
        return num[n-1];
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章