题目: 3的幂
描述:给定一个整数,写一个函数来判断它是否是 3 的幂次方。
案例1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
案例 3:
输入: 9
输出: true
案例 4:
输入: 45
输出: false
方案一:使用循环,当整数除3的余数不为0时,不是3的幂,整数一直除3,最后值为1,则该整数是3的幂
代码一:
func isPowerOfThree(_ n: Int) -> Bool {
if n < 1 {
return false
}
if n == 1 {
return true
}
var s = n
while s > 1 {
if s % 3 != 0 {
return false
}
s = s / 3
}
return true
}
执行用时320ms
方案二:3的幂有个特性,他的约数必是3的幂,所以可以求一个不溢出情况下的最大3的幂整数去除所需要判断的值,如果余数为0,则是3的幂
代码二:
return n > 0 && (Int(pow(Double(3), Double(33))) % n == 0)
为啥是33、、、嗯,自己试试就知道了。。。、、、然后这个执行用时,有时300多,有时200多、、、我也是不知道为什么