leetcode 1780. 判断一个数字是否可以表示成三的幂的和 中等
给你一个整数 n
,如果你可以将 n
表示成若干个不同的三的幂之和,请你返回 true
,否则请返回 false
。
对于一个整数 y
,如果存在整数 x
满足 y == 3x
,我们称这个整数 y
是三的幂。
示例 1:
输入:n = 12 输出:true 解释:12 = 31 + 32
示例 2:
输入:n = 91 输出:true 解释:91 = 30 + 32 + 34
示例 3:
输入:n = 21 输出:false
提示:
1 <= n <= 10^7
分析:可以用 3 进制的思路解决这道题。如果一个数是 3 的幂,那么它的三进制表示一定是首位为 1,其它位都为 0.因此可以用 n 一直除以 3,如果余数为 2,则说明它不满足题意。
bool checkPowersOfThree(int n) {while(n){if(n%3==2)return false;n/=3;}return true;
}