Leetcode:326. 3的幂
题目描述
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
思路
思路1 直接循环取模
如果模3为0,则除以3,最后判断数是否为1
思路2 转换为3为基底,然后匹配字符串以1开头
使用Java基底转换函数,然后字符串匹配是否以1为开头
思路3 使用以3为基底的最大整数对n取余
若余数为零则n是以3为底
代码
代码1
class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1){
return false;
}
while (n % 3 == 0 && n != 0){
n /= 3;
}
return n == 1;
}
}
代码2
class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1){
return false;
}
return Integer.toString(n, 3).matches("^10*$");
}
}
代码3
class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1){
return false;
}
return n > 0 && 1162261467 % n == 0;
}
}
复杂度分析
思路1时间复杂度
$O(logn)$
思路1空间复杂度
$O(1)$
思路2时间复杂度
$O(logn)$
思路2空间复杂度
$O(1)$
思路3时间复杂度
$O(1)$
思路3空间复杂度
$O(1)$