判断是否为3的幂次方|青训营笔记

58 阅读1分钟

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

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

解题思路

除了试除法,还可以用下面的时间复杂度为O(1)的方法。

通过查看相关解析,发现了这个解法,用到了数论的知识,3的幂次的质因子只有3,而所给出的n如果也是3的幂次,故而题目中所给整数范围内最大的3的幂次的因子只能是3的幂次,1162261467是3的19次幂,是整数范围内最大的3的幂次

题目给的整数范围为32位有符号整数,最大值为2147483647,而3^19 < 2147483647 < 3^20,因此判断3&19是否能被n整除就行。

代码

class Solution {
    public boolean isPowerOfThree(int n) {
        // 32位正整数最大值是2147483647,3^19 = 1162261467
        if (n > 0 && Math.pow(3, 19) % n == 0) {
            return true;
        }
        return false;
    }
}