给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

 

示例 1:

输入:n = 27
输出:true

示例 2:

输入:n = 0
输出:false

示例 3:

输入:n = 9
输出:true

示例 4:

输入:n = 45
输出:false

 

提示:

  • -231 <= n <= 231 - 1

 

进阶:

  • 你能不使用循环或者递归来完成本题吗?
Related Topics
  • 递归
  • 数学

  • 👍 187
  • 👎 0
  • 今天每日一题,easy啊!~

    class Solution {
        public boolean isPowerOfThree(int n) {
            long num = 1L;
            long i = 0;
            while (num < n ){
                num = num * 3L;
            }
            if (num == n){
                return true;
            }
            return false;
        }
    }

    用long型运算,因为如果数值特别大的话会超出Integer.MAX_VALUE,基本思路就是从3的0次方开始,一直乘以3,直到大于或者等于输入的数字n,最后判断下得到的值是否等于n,等于则说明输入的n是3的倍数,不等于则不是。

    其实也可以枚举,在Integer.MAX_VALUE内,3的幂的数字个数是非常有限的,大概….就

    1,3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907,43046721,129140163,387420489,1162261467,

    这么几个,所以,代码:

    class Solution {
        public boolean isPowerOfThree(int n) {
            int[] arr = new int[]{1,3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907,43046721,129140163,387420489,1162261467};
            for (int i : arr) {
                if (i == n){
                    return true;
                }
            }
            return false;
        }
    }