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
代码
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18591882