给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。对于一个整数 y ,如果存在整数 x 满足 y == 3x ,我们称这个整数 y 是三的幂。
例子
输入:n = 12
输出:true
解释:12 = 3^1 + 3^2
输入:n = 91
输出:true
解释:91 = 3^0 + 3^2 + 3^4
输入:n = 21
输出:false
解题思路
比较好的处理方式是转成3进制, 因为题中表明** n为若干个不同的三的幂之和**, 即不会有2个一样的3的幂出现
如果一个数是3进制的话其实只能有0, 1组成 例如 12为 0110, 91为 010101
例如:
12 = 3^1 + 3^2
91 = 3^0 + 3^2 + 3 ^4
21 = 3^0 + 2 * 3 ^ 2 返回false
循环除以3, 如果余数为2则false
未翻译版
func checkPowersOfThree(_ n: Int) -> Bool {
var temp = n
while temp > 0 {
if temp % 3 == 2 { return false }
temp /= 3
}
return true
}
翻译版
func checkPowersOfThree(_ n: Int) -> Bool {
// 定义temp = n
var temp = n
// 循环
while temp > 0 {
// 如果temp 除以3 余 2, 则返回false
if temp % 3 == 2 { return false }
// 否则temp 除以3 继续循环
temp /= 3
}
// 满足条件返回true
return true
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论