天天看點

Leetcode第47場雙周賽 B 5681. 判斷一個數字是否可以表示成三的幂的和(數學or暴力)

Leetcode第47場雙周賽 B 5681. 判斷一個數字是否可以表示成三的幂的和(數學or暴力)

思路:有一種很聰明的做法就是如果這個數轉換為三進制,隻要有一位是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;
    }
};           

複制