LeetCode——1780. 判断一个数字是否可以表示成三的幂的和(Check if Number is a Sum of Powers of Three)[中等]——分析及代码(Java)

LeetCode——1780. 判断一个数字是否可以表示成三的幂的和[Check if Number is a Sum of Powers of Three][中等]——分析及代码[Java]

一、题目

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-number-is-a-sum-of-powers-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 迭代相减

(1)思路

将整数 n 迭代地减去当前范围内最大的 3 的幂值,再判断最后是否能达到 0。

(2)代码

class Solution {
    
    
    public boolean checkPowersOfThree(int n) {
    
    
        List<Integer> nums = new ArrayList<>();
        int num = 1;
        while (num <= n) {
    
    //计算可能用到的3的幂
            nums.add(num);
            num *= 3;
        }
        for (int i = nums.size() - 1; i >= 0; i--)
            if (n >= nums.get(i))//减去当前范围内最大的3的幂
                n -= nums.get(i);
        return (n == 0);
    }
}

(3)结果

执行用时 :1 ms,在所有 Java 提交中击败了 37.29% 的用户;
内存消耗 :35.2 MB,在所有 Java 提交中击败了 67.46% 的用户。

三、其他

暂无。

猜你喜欢

转载自blog.csdn.net/zml66666/article/details/114679517