題目
連結
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