LC-1780. 判断一个数字是否可以表示成三的幂的和(回溯、数学)

1780. 判断一个数字是否可以表示成三的幂的和

难度中等43

给你一个整数 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 <= 107

回溯

class Solution {
    public boolean checkPowersOfThree(int n) {
        return dfs(0,0,n);
    }

    public boolean dfs(int idx, int sum, int n){
        if(sum > n) return false;
        if(sum == n) return true;
        // 10的7次方 不超过  3的14次方
        for(int i = idx; i <= 14; i++){
            if(dfs(i+1, sum + (int)Math.pow(3,i), n)) return true;
        }
        return false;
    }
}

数学

如果一个数字可以表示成三的幂的和,那么这个数字转换为三进制后,数字应该只有0和1

class Solution {
    public boolean checkPowersOfThree(int n) {
        while(n > 0){
            if(n % 3 == 2){
                return false;
            }
            n /= 3;
        }
        return true;
    }
}

你可能感兴趣的:(算法刷题记录,leetcode,算法)