持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
一、题目描述:
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。
示例 1:
输入:n = 6
输出:true
解释:6 = 2 × 3
示例 2:
输入:n = 8
输出:true
解释:8 = 2 × 2 × 2
示例 3:
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。
示例 4:
输入:n = 1
输出:true
解释:1 通常被视为丑数。
提示:
- -2^31 <= n <= 2^31 - 1
二、思路分析:
首先对n取0(返回false)和1(返回true)首先进行判断,然后利用while循环(循环次数不确定)判断n是否能被2,3,5其中一个数整除,如果可以则先从5开始判断(其次再判断3、2,增加循环速度),再判断所得商是否为1,如果不为1,则使用continue关键字直接开始下次循环,如果得到的商不能被2、3、5中任意一个数整除,则表明它不是丑数,返回false。
三、AC 代码:
class Solution {
public:
bool isUgly(int n)
{
if(n==1)//n取0(返回false)
{
return true;
}
if(n==0)//n取1(返回true)
{
return false;
}
while(n%2==0||n%3==0||n%5==0)//判断n是否能被2,3,5其中一个数整除
{
if(n%5==0)//先从能否被5整除开始判断,加快循环速度
{
n/=5;
if(n==1)//如果所得商为1,则返回true
{
return true;
}
else//否则直接进行下一轮循环
{
continue;
}
}
if(n%3==0)//同上流程
{
n/=3;
if(n==1)
{
return true;
}
else
{
continue;
}
}
if(n%2==0)//同上流程
{
n/=2;
if(n==1)
{
return true;
}
else
{
continue;
}
}
}
return false;//跳出循环表明该数不是丑数
}
};