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

代码

posted @ 2024-12-07 10:39  EricsT  阅读(7)  评论(0编辑  收藏  举报