力扣练习之3的幂

我爱海鲸 2022-10-10 19:04:39 初级算法

简介初级算法、数学

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnsdi2/

解法一:

class Solution {
    public boolean isPowerOfThree(int n) {
        if (n > 1) {
            while (n % 3 == 0) {
                n = n/3;
            }
        }
        return n == 1;
    }
}

思路:循环除以3,如果是3的倍数,最后的结果就是1,判断n是否等于1即可。注意1是3的0次幂。

解法二:

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

思路:递归,和循环的思路是一样的,除以3,看最后的的结果是否为1.

解法三:

class Solution {
public boolean isPowerOfThree(int n) {
       return (Math.log10(n) / Math.log10(3)) % 1 == 0;
   }
}

思路:由数学公式: n= 3^1,可以得到

解法四:

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

题中n的范围是-2^31 <= n <= 2^31 - 1,而在这个范围内3的最大幂是1162261467,在比他大就超过int表示的范围了,我们直接用它对n求余即可,过求余的结果是0,说明n是3的幂次方

你好:我的2025