Skip to content
Go back

Leetcode 1780 - Check if Number is a Sum of Powers of Three

Table of contents

Open Table of contents

題目介紹

題目:檢查數字是否為 3 的冪的和

描述: 給定一個整數 n,判斷它是否可以表示為 3 的不同冪的和。如果可以,則返回 true;否則,返回 false。

換句話說,你需要檢查 n 是否可以寫成 3^0 + 3^1 + 3^2 + … + 3^k 的形式,其中每個 3 的冪最多使用一次。

例如:

解題思路

  1. 理解 3 的冪

    • 3 的冪指的是 3 的 0 次方、1 次方、2 次方等等:1, 3, 9, 27, 81, …
  2. 轉換為三進制

    • 任何數字都可以轉換為不同的進制表示
    • 如果 n 可以表示為 3 的冪的和,那麼它的三進制表示中,每一位只能是 0 或 1
    • 例如:
      • 12 = (110)_3 = 1 * 3^2 + 1 * 3^1 + 0 * 3^0 = 9 + 3 + 0
      • 91 = (10101)_3 = 1 * 3^4 + 0 * 3^3 + 1 * 3^2 + 0 * 3^1 + 1 * 3^0 = 81 + 0 + 9 + 0 + 1
    • 如果三進制表示中出現了 2,則表示該數字不能表示為 3 的不同冪的和
      • 21 = (210)_3 = 2 * 3^2 + 1 * 3^1 + 0 * 3^0 = 18 + 3 + 0 // 有 2,所以不行
  3. 解題策略

    • 將 n 轉換為三進制
    • 檢查三進制表示中是否包含 2
    • 如果包含 2,返回 false
    • 否則,返回 true
  4. 舉例說明

    • n = 45

    • 轉換為三進制:45 = (1200)_3

    • 因為三進制表示中有 2,所以 45 不能表示為 3 的不同冪的和

    • n = 243

    • 轉換為三進制:243 = (100000)_3

    • 因為三進制表示中沒有 2,所以 243 可以表示為 3 的不同冪的和 (243 = 3^5)

代碼實現

class Solution:
    def checkIfSumOfPowersOfThree(self, n: int) -> bool:
        while n > 0:
            if n % 3 == 2:
                return False
            n //= 3
        return True

複雜度分析

常見問題與解答

總結

這題「檢查數字是否為 3 的冪的和」展示了如何利用進制轉換的特性來解決問題。解題的關鍵在於:

  1. 理解 3 的冪的特性
  2. 將數字轉換為三進制
  3. 檢查三進制表示中是否包含 2

這種解題思路不僅高效,而且適用於許多類似的進制轉換問題,是算法競賽和面試中的重要技巧。下次遇到類似的題目,可以試著想想:我是不是可以利用進制轉換來簡化問題呢?


Share this post on:

Next Post
Leetcode 1524 - Number of Sub-arrays With Odd Sum