丑数(数学、动态规划、二分搜索)
丑数Ⅰ
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
丑数 就是只包含质因数 2、3 和/或 5 的正整数。(1通常被认为丑数)
输入:n = 8 输出:true 解释:8 = 2 × 2 × 2
我的解法:
根据题目的描述可以得到下面结论,如果一个数为丑数,那么一定能够被2,3,5轮流整除,最后结果为1。
class Solution {
public:
bool isUgly(int n) {
if(n==0) return false;
if(n==1) return true;//先对特殊情况进行判断
while(n!=1) {
if(n%2==0||n%3==0||n%5==0) {//如果能被2,3,5整除
if(n%2==0) {
n=n/2;
}
else if(n%3==0) {
n=n/3;
}
else if(n%5==0) {
n=n/5;
}
}
else return false;//如果不能被整除
}
return true;//循环结束后表明为丑数
}
};
算法思想是一样的,时间和空间复杂度也相同,但是下面的解法更加简洁
leetcode解法
class Solution {
public:
bool isUgly(int n) {
if (n <= 0) {
return false;
}
vector<int> factors = {2, 3, 5};
for (int factor : factors) {//一直除2,3,5 不辗转除
while (n % factor == 0) {
n /= factor;