开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
前言
从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!
一、题目描述
给你一个整数 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;
}
};
提交排名
四、总结
这题想了一会,没什么思路,还是看别人的方法受到了启发。要将n转化为三进制进而进行求解。很好奇是否还有别的什么办法,等后面再去看看。