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?
给定一个整数,判断是否是3的幂

算法分析

方法一:暴力破解

给定数n分别取余与取整。

Java代码
public class Solution {
    public boolean isPowerOfThree(int n) {
        if (n <= 0) return false;
        
        while(n > 0) {
            if (n == 1) return true;
            else if (n % 3 != 0) {
                return false;
            } else {
                n /= 3;
            }
        }
        return true;
    }
}
方法二:

若a是b的幂,那存在一个数x满足x小于x小于Integer.MAX_VALUE,但x*b大于Integer.MAX_VALUE,而x % b = 0。Java中Interger.MAX_VALUE = 2147483647,大于3的19次幂为1162261467,小于3的20次幂3486784401,因此取1162261467,这个数
注意:此方法只能判断质数幂,判断其它类别的数,请看参考3

Java代码
public class Solution {
    public boolean isPowerOfThree(int n) {
        if (n <= 0) return false;
        
        return n > 0 && 1162261467 % n == 0;
    }
}

参考

  1. LeetCode
  2. oschina
  3. 如何快速判断一个数是不是2的幂、3的幂、4的幂

你可能感兴趣的:(LeetCode-326~Power of Three)