描述
写一个程序来检测一个整数是不是丑数
。
丑数的定义是,只包含质因子 2, 3, 5
的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。
可以认为 1
是一个特殊的丑数。
样例
给出 num = 8
,返回 true
。
给出 num = 14
,返回 false
。
解题思路1:
按照逻辑解就行,就是时间复杂度高。
class Solution {
public:
/**
* @param num: An integer
* @return: true if num is an ugly number or false
*/
bool isUgly(int num)
{
// write your code here
if(num<=0 )
return false;
if(num==1)
return true;
for(int i=2;i<=num/2;i++)
{
if(isPrime(i)&&num%i==0)
{
if(i!=2 && i!=3 && i!=5)
return false;
}
}
return true;
}
bool isPrime(int num)
{
for(int i=2;i<=sqrt(num);i++)
{
if(num%i==0)
return false;
}
return true;
}
};
解题思路2:
如果一个数能连续被2整除,或连续被3整除,或连续被5整除,最后的数为1 即为丑数。
public class Solution {
/**
* @param num: An integer
* @return: true if num is an ugly number or false
*/
public boolean isUgly(int num) {
// write your code here
if(num <= 0)
return false;
int[] nums = {2,3,5};
for(int i=0; i<nums.length; i++)
while(num % nums[i] == 0)
num /= nums[i];
return num == 1 ? true : false;
}
}