题目分析
原题:丑数是只包含质因数 2、3 或 5 的正整数。给定一个整数n,请你判断n是否为丑数,如果是返回 true,否则返回 false。
今天的LeetCode每日一题,从代码角度来说比较容易,重要的是从数学角度提炼题目的精髓,其实有点像脑筋急转弯的感觉。
思路分析
首先,丑数的定义中规定了丑数是正整数。而输入的是整数n,不一定是正还是负,抑或是0。因此需先判断整数n的正负,若为0或负数,直接返回false。
再者,丑数中只包含了2、3或5这三个因数。那么,我们可以把输入整数n中的2、3、5都除掉。若n为丑数,则此时n应该为1;否则就不是丑数。
关于除的先后顺序,这个并不会影响结果,因为乘法有交换律的原则,除的先后顺序并不会改变其中某一种质因数的个数。
代码实现
class Solution {
public:
bool isUgly(int n) {
if(n<=0){//先判断n是否为0或负,若为0或负直接返回false
return false;
}
while(n%2==0){//将所有的2除干净
n/=2;
}
while(n%3==0){//将所有的3除干净
n/=3;
}
while(n%5==0){//将所有的5除干净
n/=5;
}
return n==1;//若此时n为1则说明为丑数,返回true;不然返回false
}
};