原题出处: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的幂次方