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

LeetCode 507: Perfect Number

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

基本資料
#

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

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

解題思路
#

因數 d 和 n / d 成對出現,枚舉 d 從 2 到 √n(Number Theory 模板二的寫法):整除時加上 d,d != n / d 時再加上 n / d。1 一定是因數但 n 本身不算,所以總和從 1 開始,而且 n = 1 要排除。

我的解法
#

class Solution:
    def checkPerfectNumber(self, num: int) -> bool:
        if num == 1:
            return False
        total = 1
        d = 2
        while d * d <= num:
            if num % d == 0:
                total += d
                if d != num // d:
                    total += num // d
            d += 1
        return total == num

複雜度
#

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

要特別避免的錯誤
#

  • 不能算到 n 本身。
  • 完全平方數的 √n 只能加一次。
  • n = 1 的真因數和是 0。

面試口說整理
#

因數是成對的,我只枚舉到根號 n,每找到一個因數 d 就同時加上 d 和 n / d,平方根只加一次,總和從 1 開始、不含 n 本身,最後比較是否等於 n。時間 O(√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 326: Power of Three
·1 分鐘
LeetCode Easy Math Recursion
LeetCode 326 解題筆記:一直除以 3 直到除不盡,剩 1 就是;不用迴圈的話,3^19 能被 n 整除就是
LeetCode 504: Base 7
·1 分鐘
LeetCode Easy Math String
LeetCode 504 解題筆記:對絕對值不斷取 % 7 和 // 7,最後加上負號並反轉;0 要特別處理
LeetCode 509: Fibonacci Number
·1 分鐘
LeetCode Easy Math Dynamic-Programming Recursion Memoization
LeetCode 509 解題筆記:一維 DP 的起點:只需要前兩項,用兩個變數滾動
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上