方法一:while
让n反复除以2、3、5 直到最后为1即为丑数,否则不是丑数;
class Solution {
public boolean isUgly(int n) {
//
if(n<1){
return false;
}
if(n==1){
return true;
}
while(n%2==0){
n=n/2;
}
while(n%3==0){
n=n/3;
}
while(n%5==0){
n=n/5;
}
if(n==1){
return true;
}
return false;
}
}
或者:
class Solution {
public boolean isUgly(int n) {
if(n<1) return false;
int[] a=new int[]{2,3,5};
for(int k:a){
if(n==1) break;
while(n%k==0){
n=n/k; // 更新n
}
}
if(n==1){
return true;
}
return false;
}
}
类似多叉树遍历; for遍历 2、3、5 ,让每轮得到的n去除以2、3、5;
方法二:dfs
class Solution {
public boolean isUgly(int n) {
// base case
if(n<1){
return false;
}
if(n==1){
return true;
}
for(int k:new int[]{2,3,5}){
if(n%k==0){
return isUgly(n/k);
}
}
return false;
}
}
或者设一个布尔标记a,更好理解;
class Solution {
boolean a=false;
public boolean isUgly(int n) {
check(n);
return a;
}
void check(int n){
if(n<1){
return;
}
if(n==1){
a=true;
return;
}
for(int k:new int[]{2,3,5}){
if(n%k==0){ // 满足条件才递归
check(n/k);
}
}
return;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89213.html