Leetcode_1780.判断一个数字是否可以表示成三的幂的和
此题第一眼是不是想到了动态规划??Nonono,其实只需要一个很简单的进制转换的思想,由于二进制用的比较多,以下示例基于二进制:
所有的非负整数都可以表示为不同的2的幂次方的和。这是二进制系统的基本性质。
例如:12
二进制为:1 1 0 0
此时将 12 除以 2 得到 6
二进制为:0 1 1 0
可以看到,除以2 之后二进制的向前挪动了一位,基于此性质,回到题目中
题目中为 3 的次幂相加,所以将其转为 3 进制
12
三进制为:0 1 1 0
我们要做的就是每位数都为 0 或者 1 ,为什么呢?
例如21
三进制:2 1 0
在题目要求中 3次幂之前是没有系数的,所以不能让其为 2 ,为 1 和 0的话可以省略这个系数或者直接跳过这一次幂
回到 12 将其不断除以 3 ,三进制为不断向前,判断每一位是否为 2 。
ac代码;
class Solution {
public:bool checkPowersOfThree(int n) {while(n){if(n%3==2){return false;}n/=3;}return true;}
};