Leetcode刷题 2021.03.07
Leetcode5681 判断一个数字是否可以表示成三的幂的和
给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。
对于一个整数 y ,如果存在整数 x 满足 y == 3x ,我们称这个整数 y 是三的幂。
昨天晚上和今天早上搞了两场周赛,本来只想参加一场的。结果双周赛比较简单,但是有一个地方怎么也过不了,导致双周赛排名拉跨。一气之下第二天早上又参加周赛,还好周赛成绩还不错。简单题就不记录了,都是比较直观的题。
这题直接的想法就是先枚举三的幂,然后再判断数字能否有一些数组成。比赛的时候没时间想其他的,想到什么就写了。结果一看题解有很巧妙的方法。还是太菜了。。
class Solution {
List<Integer> list = new ArrayList<>();
public boolean checkPowersOfThree(int n) {
int i = 0;
//先枚举三的幂
while (true){
int temp = (int) Math.pow(3, i);
if (temp > 1_000_000_0) break;
list.add(temp);
i++;
}
return helper(0, n, 0);
}
//判断数字是否能由一些三的幂组成
private boolean helper(int index, int n, int sum){
if (sum == n){
return true;
}
if (sum > n || index >= list.size()){
return false;
}
boolean a = helper(index + 1, n, sum + list.get(index));
boolean b = helper(index + 1, n, sum);
return a || b;
}
}
如果一个数字可以表示成三的幂的和,那么这个数字转换为三进制后,数字应该只有0和1,因为每个数字要么不用,要么就用一次。所以不能出现2.
class Solution {
public boolean checkPowersOfThree(int n) {
while (n > 0) {
if (n % 3 == <