美文网首页
LeetCode*326. Power of Three

LeetCode*326. Power of Three

作者: _Xie_ | 来源:发表于2017-07-21 23:31 被阅读0次

LeetCode题目链接

注意:凡是以英文出现的,都是题目提供的,包括答案代码里的前几行。

题目:

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

解析:

这一题最开始的想法就是每次都除以3,看最后的余数是否为0。(循环或者递归)
但是后面有一个附加的条件:能否不用循环或者递归来解决问题??

参考了一些文章,文章链接

答案一:

利用int型的最大值范围在319到320之间,来取余(Java)

public class Solution {
public boolean isPowerOfThree(int n) {
    // 1162261467 is 3^19,  3^20 is bigger than int  
    return ( n>0 &&  1162261467%n==0);
}

答案二:

利用数学函数。 如果用自然底数elogRes = log(n) / log(3) 当输入是243时,结果错误。下面是原因:

log(243) = 5.493061443340548    log(3) = 1.0986122886681098
   ==> log(243)/log(3) = 4.999999999999999

log10(243) = 2.385606273598312    log10(3) = 0.47712125471966244
   ==> log10(243)/log10(3) = 5.0

因此只能使用log10(n) / log10(3),出于同样的原因,要考虑小数的误差,因此用(logRes - (int)logRes) == 0来判断最终的结果。

class Solution {
public:
    bool isPowerOfThree(int n) {
        double logRes = log10(n) / log10(3); 
        return (logRes - (int)logRes) == 0 ? true : false;
    }
};

答案三:

穷举所有的值。非常暴力!!!思路很赞,因为int型表示的值有限

public boolean isPowerOfThree(int n) {
    HashSet<Integer> set = new HashSet<>(Arrays.asList(1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467));
    return set.contains(n);
}

相关文章

网友评论

      本文标题:LeetCode*326. Power of Three

      本文链接:https://www.haomeiwen.com/subject/lwsykxtx.html