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

LeetCode 202: Happy Number

·1 分鐘· ·
LeetCode Easy Hash-Table Math Two-Pointers Floyds-Cycle-Finding-Algorithm
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

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

  • 提交紀錄:Runtime Error → Wrong Answer → Runtime Error → Wrong Answer → Accepted → Wrong Answer → Accepted

解題思路
#

不斷做「位數平方和」,數字很快就會變小,最後不是到 1,就是進入一個不含 1 的環。用集合記看過的數,看到重複就代表進環了(也可以用 Linked List 模板三的快慢指針判圈,O(1) 空間)。

我的嘗試
#

兩次 WA 都是同一個錯:迴圈裡一直用原本的 n 算平方和,沒有更新 n,第二輪就重複了,例如 94 會走到 1,這版回傳 False。

正確解法
#

class Solution:
    def isHappy(self, n: int) -> bool:
        seen = set()
        while n != 1 and n not in seen:
            seen.add(n)
            n = sum(int(c) ** 2 for c in str(n))
        return n == 1

複雜度
#

每一步 O(log n),步數很少;空間 O(步數)。

要特別避免的錯誤
#

  • 每一輪要用新的數字算下一輪,n 要更新。

面試口說整理
#

我不斷把數字換成位數平方和,用集合記看過的數,走到 1 就是快樂數,看到重複代表進入不含 1 的環。時間很短,可以視為 O(log n)。

相關文章

LeetCode 141: Linked List Cycle
·1 分鐘
LeetCode Easy Hash-Table Linked-List Two-Pointers Floyds-Cycle-Finding-Algorithm
LeetCode 141 解題筆記:Floyd 判圈,快指針一次兩步、慢指針一次一步,有環就一定會相遇;兩個都要從自己的位置往前走
LeetCode 160: Intersection of Two Linked Lists
·1 分鐘
LeetCode Easy Hash-Table Linked-List Two-Pointers
LeetCode 160 解題筆記:兩個指標走完自己的串列就換走對方的,都走 lenA + lenB 步,會同時到達交點或同時到 None
LeetCode 13: Roman to Integer
·1 分鐘
LeetCode Easy Hash-Table Math String
LeetCode 13 解題筆記:從左到右加每個符號的值,如果它比右邊的符號小就改成減
LeetCode 171: Excel Sheet Column Number
·1 分鐘
LeetCode Easy Math String
LeetCode 171 解題筆記:從左到右 res = res × 26 + 字母的值(A = 1)
LeetCode 205: Isomorphic Strings
·1 分鐘
LeetCode Easy Hash-Table String
LeetCode 205 解題筆記:兩個字串的字元要一對一對應,字元種類數和配對種類數都相同就成立
LeetCode 217: Contains Duplicate
·1 分鐘
LeetCode Easy Array Hash-Table Sorting
LeetCode 217 解題筆記:轉成 set 後長度變短就代表有重複