LeetCode 1780. 判断一个数字是否可以表示成三的幂的和(c++)

89 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

前言

从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!

一、题目描述

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

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

二、思路分析

因为是要判断n是否是表示成若干个不同的三的幂之和,注意是若干个不同的三的幂之和,因为是若干个不同的三的幂,所以它们的和转化为三进制在各个位上只可能是0或1。

所以这题的解法就很清晰了,只需要将n转化为三进制,然后检测各个位上是否有2的存在,如果有的话,n就不能表示成若干个不同的三的幂之和;如果没有的话,n就能表示成若干个不同的三的幂之和。

三、AC代码

class Solution {
public:
    bool checkPowersOfThree(int n) {
        int i;
        while(n!=0){
            i=n%3;
            if(i==2){
                return false;
            }
            n=n/3;
        }
        return true;
    }
};

提交排名

image.png

四、总结

这题想了一会,没什么思路,还是看别人的方法受到了启发。要将n转化为三进制进而进行求解。很好奇是否还有别的什么办法,等后面再去看看。