雜湊 簡單 202 快樂數

2021-10-25 17:14:37 字數 1740 閱讀 9597

【題目】

編寫乙個演算法來判斷乙個數 n 是不是快樂數。

「快樂數」定義為:

對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和。

然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。

如果 可以變為 1,那麼這個數就是快樂數。

如果 n 是快樂數就返回 true ;不是,則返回 false 。

【示例 1】

輸入:19

輸出:true

解釋:12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1

【示例 2】

輸入:n = 2

輸出:false

【提示】

1 <= n <= 231 - 1

【**】

【python】

【方法1:】

jilu列表中記錄的是所有出現過的數字,每次處理完乙個數字生成下乙個數字之後,就會判斷這個新產生的數字,是否存在於jilu之中,若存在於,則說明構成乙個死迴圈,該數不是快樂數。

class

solution

:def

(self, n:

int)

->

bool

: cnt=n

jilu=

[n]while cnt!=1:

cnt=

str(cnt)

s=0for c in cnt:

s+=(ord

(c)-48)

**2cnt=s

if cnt in jilu:

return

false

return

true

【方法2:數學法】跟方法1的**邏輯很像,但是不同在於,cycle_members是導致不能構成快樂數的數字鏈的集合(列表),每處理完乙個數,產生乙個新的數,都要判斷該數是否存在於迴圈列表中,如果存在返回false

執行用時:

36 ms, 在所有 python3 提交中擊敗了95.01%的使用者

記憶體消耗:

14.6 mb, 在所有 python3 提交中擊敗了82.40%的使用者

class

solution

:def

(self, n:

int)

->

bool

: cycle_members =

defget_next

(number)

: total_sum =

0while number >0:

number, digit =

divmod

(number,10)

total_sum += digit **

2return total_sum

while n !=

1and n not

in cycle_members:

n = get_next(n)

return n ==

1

【知識點】

divmod(num,10)

n=

13shiwei,gewei=

divmod

(n,10

)print

(shiwei,gewei)

題解 LeetCode 202 快樂數

編寫乙個演算法來判斷乙個數n是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為1,那麼這個數就是快樂數。如果n是快樂數就返回true 不是,則返回false。輸入 19 輸出 ...

快慢指標遍歷 202 快樂數

2.202 快樂數 編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。如果 n 是快樂數就返回 true 不是...

雜湊表 快樂數

編寫乙個演算法來判斷乙個數是不是 快樂數 乙個 快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。示例 輸入 19輸出 true解釋 12 92 82 82 22...