【題目】
編寫乙個演算法來判斷乙個數 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...