![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcuQWb4gHZ3MzdiV2LcdzMxITNzgzLcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
思路:有一種很聰明的做法就是如果這個數轉換為三進制,隻要有一位是2就不可能被表示為若幹個不同的三的幂之和 因為如果這一位是1 就可以由3的某次方(包括0次)來完成,如果是0也是同理,2就無解
在比賽中我是去預處理出1e7以内的所有三的幂然後二進制枚舉0就是沒取 1就是取 1e7以内的所有三的幂大概隻有16個直接2^16枚舉就可以
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;
}
};
複制