Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.
Note that 1 is typically treated as an ugly number.
我的思路是 求的 n 所有的指数 然后 在判断所有的质数中是否全是 1 2 3 5。 代码如下:
static boolean isUgly(int n)
{
if(n==1)
return true;
if(n < 0)
return false;
List<Integer> lst = new ArrayList<Integer>();
while( n > 1)
{
for(int i = 2 ; i <= n ; i++)
{
if(n%i ==0 )
{
lst.add(i);
n = n /i;
break;
}
}
}
for(int i : lst)
{
if(i!=2 && i!=3 && i!=5)
return false;
}
return true;
}
时间复杂度 0(n^2).而且提交的时候 没通过,没明白。
后来看了 discuss中的讨论
用了以下代码实现:
public boolean isUgly(int num) {
if(num <= 0) return false;
if(num == 1) return true;
while( num > 1){
if(num % 2 == 0){
num /= 2;
}else if( num % 3 == 0){
num /=3;
}else if(num % 5 == 0){
num /= 5;
}else{
return false;
}
}
return true;
}
我的思路是求因子,而这个做法是根据合法的因子在去判断。
很明显第二种做法利用了题目的已知的条件。
并且时间复杂度 0(1).