链接
思路
首先要找到所有的素数因子,没找到一个判断是否为2,3,5中的一个,不是的话直接返回0.
c
1.
bool isUgly(int num){
int i;
while(num != 1){
i = 2;
//找到一个素数因子
while(num % i){
i++;
}
num /= i;
if((i != 2) && (i != 3) && (i != 5)){
return 0;
}
}
return 1;
}
应该是没有错的
但是这里卡在了一个大数-2147483648
上面,时间超出了限制。而且数字太大,存储不下。
2.
就有了更好的办法。要判断这个数除了2, 3, 5之外是否有其他因子,可以先去除其2, 3, 5因子。
bool isUgly(int num){
int i;
if(num <= 0){
return 0;
}
while(num % 2 == 0){
num /= 2;
}
while(num % 3 == 0){
num /= 3;
}
while(num % 5 == 0){
num /= 5;
}
if(num == 1){
return 1;
}
else{
return 0;
}
}
0ms击败100%?迷惑行为
python
class Solution:
def isUgly(self, num: int) -> bool:
if num <= 0:
return False
list = [2, 3, 5]
for i in list:
while(num % i == 0):
num /= i
if num == 1:
return True
else:
return False
javascript
/**
* @param {number} num
* @return {boolean}
*/
var isUgly = function(num) {
if(num <= 0){
return false;
}
const list = [2, 3, 5];
for(let i of list){
while(num % i == 0){
num /= i;
}
}
if(num == 1){
return true;
}
else{
return false;
}
};