返回介绍

solution / 1700-1799 / 1780.Check if Number is a Sum of Powers of Three / README

发布于 2024-06-17 01:03:14 字数 2456 浏览 0 评论 0 收藏 0

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

English Version

题目描述

给你一个整数 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$ 可以表示成若干个“不同的”三的幂之和,那么 $n$ 的三进制表示中,每一位上的数字只能是 $0$ 或者 $1$。

因此,我们将 $n$ 转换成三进制,然后判断每一位上的数字是否是 $0$ 或者 $1$。如果不是,那么 $n$ 就不可以表示成若干个三的幂之和,直接返回 false;否则 $n$ 可以表示成若干个三的幂之和,返回 true

时间复杂度 $O(\log_3 n)$,空间复杂度 $O(1)$。

class Solution:
  def checkPowersOfThree(self, n: int) -> bool:
    while n:
      if n % 3 > 1:
        return False
      n //= 3
    return True
class Solution {
  public boolean checkPowersOfThree(int n) {
    while (n > 0) {
      if (n % 3 > 1) {
        return false;
      }
      n /= 3;
    }
    return true;
  }
}
class Solution {
public:
  bool checkPowersOfThree(int n) {
    while (n) {
      if (n % 3 > 1) return false;
      n /= 3;
    }
    return true;
  }
};
func checkPowersOfThree(n int) bool {
  for n > 0 {
    if n%3 > 1 {
      return false
    }
    n /= 3
  }
  return true
}
function checkPowersOfThree(n: number): boolean {
  while (n) {
    if (n % 3 > 1) return false;
    n = Math.floor(n / 3);
  }
  return true;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文