public class Solution {
//根据实际判断情况去分析,比如14,判断14/2,14/3,14/5,接着往下
//类似于一个动态规划,但不存在最优解,所以没有递归表达式,用递归来做
/*public boolean isUgly(int num) {
if(num == 1) return true;
if(num % 2 != 0 && num % 3 != 0 && num % 5 != 0){
return false;
}
return isUgly(num / 2) || isUgly(num / 3) || isUgly(num / 5);
}*/
//上面这种解法会因为递归次数过多导致栈溢出,所以想办法避免递归,怎么避免?
//下面这种解法用注释掉的那一行的下面三行来代替了注释的那一行,减少了一些递归的次数,因为注释那一行中存在重复运算
//重复运算:比如15%3=0,15%5=0,3和5都是15的因子,选一个来就行,最后都会走到1,殊途同归
public boolean isUgly(int num) {
if(num == 0) return false;//对于0要单独处理,因为它在递归中会产生死递归
if(num == 1) return true;
if(num % 2 != 0 && num % 3 != 0 && num % 5 != 0){
return false;
}
//return isUgly(num / 2) || isUgly(num / 3) || isUgly(num / 5);
if(num % 2 == 0) return isUgly(num / 2);
else if(num % 3 == 0) return isUgly(num / 3);
else return isUgly(num / 5);
}
}
leetcode[Ugly Number]//待整理多种解法
最新推荐文章于 2020-08-25 14:30:35 发布