【Leetcode】python - [202] Happy Number 個人解法筆記

題目出處

202. Happy Number

難度

easy

個人範例程式碼

class Solution:
    def isHappy(self, n: int) -> bool:
        if not n:
            return False

        visited = set([n])
        while True:
            n = self.get_square_sum(n)
            if n == 1 or n in visited:
                break
            visited.add(n)

        return n == 1

    def get_square_sum(self, n):
        total_sum = 0
        for each_n in str(n):
            total_sum +=  int(each_n)**2

        return total_sum

算法說明

這題我覺得是題目還比較難懂… 簡單解釋一下,
一個數字能被稱作「Happy number」,
表示這個數字在「無限重複”把每一個單一數字平方並加總“的過程中,最終可以到達 1 這個數字」

舉例 - 成功的例子 (不斷的把每個單一數字平方並加總):

7 =>
49 =>
97 (16+81) =>
130 (81+49) =>
10 (1+9+0) =>
1 (發現答案,是 Happy number)

舉例 - 失敗的例子 (不斷的把每個單一數字平方並加總,會循環,永遠到不了 1):

2 =>
4 =>
16 =>
37 (1+36) =>
58 (9+49) =>
89 (25+64) =>
145 (64+81) =>
42 (1+16+25) =>
20 (16+4) =>
4 (開始循環,不是 Happy number)

看懂題目後,這題就很簡單了,我們可以簡單地用一個 hashset 來記錄我們已經計算過的數字。

input handling

如果沒有 n,return False

Boundary conditions

一直循環,直到發現重複的數字

Reference