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

问题描述

给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false

对于一个整数 y ,如果存在整数 x 满足 y == 3^x ,我们称这个整数 y 是三的幂。

提示:

  • 1 <= n <= 10^7

示例

示例 1:

输入:n = 12
输出:true
解释:12 = 31 + 32

示例 2:

输入:n = 91
输出:true
解释:91 = 30 + 32 + 34

示例 3:

输入:n = 21
输出:false

解题思路

这题可以类比二进制数的表示,我们知道,二进制中一个数可以由 0 和 1 组成的序列表示,那么在三进制中,一个数可以由 0 ,1 和 2 组成的序列所表示。我们再翻译一下题目,就知道题目要我们判断的是,一个数能否由三进制中的 0 和 1 所表示。代码如下:

class Solution {
public:
    bool checkPowersOfThree(int n) {
        while(n){
            if(n % 3 == 2){
                return false;
            }
            n /= 3;
        }
        return true;
    }
};
posted @ 2022-12-09 16:44  greatestchen  阅读(20)  评论(0编辑  收藏  举报