Leetcode第47场双周赛 B 5681. 判断一个数字是否可以表示成三的幂的和(数学or暴力)

2021-03-08 18:05:43 浏览数 (1)

思路:有一种很聪明的做法就是如果这个数转换为三进制,只要有一位是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;
    }
};

0 人点赞