3的幂--leetcode326

题目

leetcode 326

Power of Three
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?
Credits:
Special thanks to @dietpepsi for adding this problem and creating all test cases.
Subscribe to see which companies asked this question

分析

题目本身是一道easy的题目,但是有要求不用循环和递归这个就有些麻烦了。

思路一

不能用循环和递归那么就从3的幂的几个数之间寻找联系,于是列了几个数(3,9,27)观察了一阵,并没有结论,(pass)

思路二

既然数都列出来了那么就一个个比较就是了,思路比较粗暴就直接列代码了

bool isPowerOfThree(int n) {
    switch(n)
    {
        case 1:return true;
        case 3:return true;
        case 9:return true;
        case 27:return true;
        case 81:return true;
        case 243:return true;
        case 729:return true;
        case 2187:return true;
        case 6561:return true;
        case 19683:return true;
        case 59049:return true;
        case 177147:return true;
        case 531441:return true;
        case 1594323:return true;
        case 4782969:return true;
        case 14348907:return true;
        case 43046721:return true;
        case 129140163:return true;
        case 387420489:return true;
        case 1162261467:return true;
        case 3486784401:return true;//int范围内最大的是3^19
        default: return false;

    }
}

但是提交的结果要140ms。

思路三

思路二中对每个数字的判断只进行了20次左右的比较运算,但是在结果排名比较靠后。所以在思考许久未果之后,又浏览了讨论区,有了新方法。

bool isPowerOfThree(int n) {
    return n>0 && !(1162261467 % n) ;
}
//if(n是3的幂)那么 3^19 % n == 0

但是即使是这样,最后排名也只有69%。还有一种思路就是log3(n),取3的对数。但是这样感觉并不会比思路三更快。

后续

参考了官方给出的解答,方法应该是没错的,可能是leetcode运行时的问题导致某些提交的运行时间更短。

参考资料

leetcode 326

猜你喜欢

转载自blog.csdn.net/lucifly/article/details/51165659
今日推荐