终于还是踏上了算法这条不归路,记录一下做题的历程
丑数
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
丑数就是只包含质因数 2、3 和/或 5 的正整数。
示例
输入:n = 6
输出:true
解释:6 = 2 × 3
输入:n = 8
输出:true
解释:8 = 2 × 2 × 2
输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。
输入:n = 1
输出:true
解释:1 通常被视为丑数。
数学
这道题本质在于质数分解如何用代码实现。下面代码是一种质数分解的通用实现。
代码基于下面的公式。
代码
class Solution {
public:
bool isUgly(int n) {
// vector<int> tmp;
if(n == 1){
return true;
}
else if (n<=0){
return false;
}
for(int i = 2; i<n; i++){ // 分解质因子 例: 6 = 2 * 3
if (i > 5){ // 包含大于5的质因子时退出判断
return false;
}
while(n%i == 0){ // 循环判断是否为单个质因子的幂次方 例:8 = 2 * 2 * 2;
// tmp.pushback(i);
n /= i;
}
}
return true;
}
};
华为机试的质数因子与本题相似,可以作为参考。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ugly-number