IOS 算法(中级篇) ----- 判断一个数字是否可以表示成三的幂的和

给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。对于一个整数 y ,如果存在整数 x 满足 y == 3x ,我们称这个整数 y 是三的幂。

例子

输入:n = 12
输出:true
解释:12 = 31 + 32

输入:n = 91
输出:true
解释:91 = 30 + 32 + 34

输入: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 算法合集地址

你可能感兴趣的:(IOS 算法(中级篇) ----- 判断一个数字是否可以表示成三的幂的和)