↓快轉到主要內容
  1. LeetCode/

LeetCode 326: Power of Three

·1 分鐘· ·
LeetCode Easy Math Recursion
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Accepted(一次通過)

解題思路
#

n <= 0 一定不是。迴圈做法:只要 n % 3 == 0 就除以 3,最後剩 1 才是。進階要求不用迴圈:32 位元範圍內最大的 3 的次方是 3^19 = 1162261467,而 3 是質數,所以它的因數全部都是 3 的次方:n > 0 and 3**19 % n == 0(Number Theory)。

我的解法
#

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return n > 0 and 3**19 % n == 0

複雜度
#

時間 O(1),空間 O(1)。

要特別避免的錯誤
#

  • 0 和負數要排除。
  • 這個技巧只對質數的次方有效:底數是合數時(例如 4),最大次方的因數不一定是它的次方,2 整除 4^15,但 2 不是 4 的次方。

面試口說整理
#

3 是質數,32 位元內最大的 3 的次方是 3 的 19 次方,它的因數全部都是 3 的次方,所以我檢查 n 大於 0 而且能整除 3 的 19 次方。時間 O(1)。

相關文章

LeetCode 342: Power of Four
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 342 解題筆記:先確認是 2 的次方,再確認那個 1 在偶數位:n & 0x55555555 != 0,或 n % 3 == 1
LeetCode 231: Power of Two
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 231 解題筆記:2 的次方只有一個位元是 1,n & (n - 1) 會把最低的 1 消掉,結果是 0 就是;n 要是正數
LeetCode 263: Ugly Number
·1 分鐘
LeetCode Easy Math
LeetCode 263 解題筆記:正數才可能是 ugly number,把因數 2、3、5 全部除掉,剩下 1 就是
LeetCode 292: Nim Game
·1 分鐘
LeetCode Easy Math Brainteaser Minimax-Algorithm Game-Theory
LeetCode 292 解題筆記:剩 4 的倍數顆石頭的人必輸,所以 n % 4 != 0 時先手贏
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 367: Valid Perfect Square
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 367 解題筆記:在 [1, num] 上二分找 mid² == num,不用 sqrt