您的位置:首页 > 其它

326. Power of Three

2017-08-03 15:52 99 查看
1.题目

  

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?
2.分析

  这道题,拿到手时,感觉是蛮简单的- -,但是后面有一句话,不使用递归或者循环可以实现吗?如果用循环或者递归,这道题会很快就解决了。

3.解题

   我的解题:

 public class Solution {
    public boolean isPowerOfThree(int n) {
        // 边界处理
        if(n==1){
            return true;
        }
        int a = n/3;
        int b = n%3;
        while(a!=0&&b==0){
            b = a%3; // 很关键在a值未改变时,进行赋值
            a = a/3;
        }
        if(a==0&&b==1){
            return true;
        }
        return false;
    }
}


别人的解题(1):

public boolean isPowerOfThree(int n) {
return n>0 && (n==1 || (n%3==0 && isPowerOfThree(n/3)));
}


  其实这种解法也是使用了递归的方法。效率应该也不是很高,但是代码是真的很简洁。

解题(2):

  

public boolean isPowerOfThree(int n) {
return n > 0 && (1162261467 % n == 0);
}


  这种解法个人感觉还是不错的,但是总觉得有一种小打小闹,在玩的感觉,不是常规的那种解法,有种投机取巧的感觉,但是能想出来很厉害了。确实int范围内的数是3的次方数的没有多少,完全可以暴力破解- -。

4.总结

  在解题过程中,还是多参考一些别人的解法,对比自己的解法,这样能发现问题在哪?自己的不足,别人解题的巧妙之处。然后进行归类总结,举一反三,以后解类似的算法题时,能找到不错的解题思路。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: