LeetCode 263[醜數]

EricsT發表於2024-12-07

題目

連結

LeetCode 263[醜數]

詳情

LeetCode 263[醜數]

例項

LeetCode 263[醜數]

提示

LeetCode 263[醜數]

題解

思考

題目對醜數的定義:只包含質因數2、3、5的正整數

條件一:只包含質因數2、3、5

條件二:正整數

對於條件二很好篩選:如果給定值 n 小於 1 ,即給定值為 0 或者是負數,此時條件二不滿足,則返回 false

該部分的程式碼實現如下:

        if (n < 1)//0或負數則不是醜數,直接返回
            return false;

對於條件一的篩選,此處我是選擇迴圈整除,即在一次迴圈內判斷能否被2、3、5至少一個整除:

由於在進行條件二的篩選後,n 的值限定在 >= 1 內

此處我採用的是 while 迴圈,迴圈進行的條件是 n > 1,故當 n == 1時, 退出迴圈

該部分程式碼實現如下:

        while (n > 1)//如果是醜數,則最後可以整除,整除完畢最後 n 為 1,則退出迴圈返回true
        {
            ...
        }

迴圈體:

首先定義了一個布偶型變數 isBool 來記錄該數在此輪迴圈內是否可能為醜數,預設值為 false,

該部分程式碼實現如下:

            bool isBool = false;//初始值為false,預設不是醜數

判斷能否被5整除,如果能被5整除則,可能是醜數,此時 isBool 應該為 true

該部分程式碼實現如下:

            if ((0 == (n % 10)) || (5 == (n % 10)))
            {
                n = n / 5;
                isBool = true;//能被5整除,則可能是醜數
            }

判斷能否被2整除,如果能被2整除,可能是醜數,此時 isBool 應該為 true

該部分程式碼實現如下:

            if (0 == (n % 2))
            {
                n = n / 2;
                isBool = true;//能被2整除,則可能是醜數
            }

判斷能否被3整除,如果能被3整除,可能是醜數,此時 isBool 應該為 true

該部分程式碼實現如下:

            if (0 == (n % 3))
            {
                n = n / 3;
                isBool = true;//能被3整除,則可能是醜數
            }

如果,既不能被2整除,也不能被3整除,還不能被5整除,則以上分支都進不去,則 isBool 依舊是 false,此時,這個數就一定不是醜數了,則直接返回 false

該部分程式碼實現如下:

            //既不能被5整除,也不能被2整除,還不能被3整除,則不是醜數,直接返回
            if (!isBool)
                return false;

如果,能被2、3、5至少一個整除,則可能是醜數,繼續下一次迴圈

如果該數是醜數,則一直能被2、3、5至少一個整除,則最後 n 為 1 ,退出迴圈,返回 true

程式碼

LeetCode 263[醜數]

相關文章