来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-three
题目
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
能不能整除3。
方法1-循环
func isPowerOfThree(_ n: Int) -> Bool {
if n <= 0 {
return false
}
if n == 1 {
return true
}
var currentNum = n//除以3或乘以3之后的数
var currentMod = 0//余数
if n > 1 {
while (currentNum != 1) {
currentMod = currentNum % 3
currentNum = currentNum / 3
if (currentMod != 0) {
return false
}
}
}else {
while (currentNum != 1 ) {
currentMod = currentNum % 3
currentNum = currentNum * 3
if (currentMod != 0) {
return false
}
}
}
return true
}
方法2-得知整数里面3的19次方是最大的
func isPowerOfThree(_ n: Int) -> Bool {
return n>0 && (Int(pow(Double(3), Double(19))) % n == 0)
}
最后
第二种方法,是看了网上大神们的得出来的,完全没想到,太妙了。