思路:有一种很聪明的做法就是如果这个数转换为三进制,只要有一位是2就不可能被表示为若干个不同的三的幂之和 因为如果这一位是1 就可以由3的某次方(包括0次)来完成,如果是0也是同理,2就无解
在比赛中我是去预处理出1e7以内的所有三的幂然后二进制枚举0就是没取 1就是取 1e7以内的所有三的幂大概只有16个直接2^16枚举就可以
代码语言:javascript复制class Solution {
public:
bool checkPowersOfThree(int n) {
int a[100]={1,3};
for(int i=2;i<17;i ){
a[i]=a[i-1]*3;
}
for(int i=0;i<1<<16;i ){
int tep=0;
for(int j=0;j<16;j ){
if(i>>j&1)tep =pow(3,j);
}
if(tep==n)return 1;
}
return 0;
}
};