202. Happy Number
題目網址:https://leetcode.cn/problems/happy-number/
題意:判斷整數
n
是否為快樂數。快樂數的定義為:
- 對於一正整數, 每次將該數轉換為它每一位數的平方和
- 重複此步驟直到該數為
1
, 也有可能進入無窮迴圈(始終無法變成1
)- 如果該數能變成
1
, 則它就是快樂數若
n
為快樂數, 則返回true
; 否則, 返回false
。
Solution 1:
想法:利用 hash table 來記錄出現過的數, 一旦重複出現, 代表會無限循環
class Solution { |
- time:$O(log(n))$ ➔ 令
k
為n
除以10
的次數, $\dfrac{n}{10^k} = 1 ➔ k = log(n)$ - space:$O(log(n))$ ➔
s
中儲存 $log(n)$ 次轉換後的元素
Solution 2:
想法:概念同 Solution 1, 只是改成利用 Two Pointers 來判斷是否出現重複的數, 可參考 141. Linked List Cycle,
slow
每次只轉換一次, 而fast
每次轉換兩次
- 若存在循環(重複數), 則
slow
和fast
必相遇(fast
倒追slow
) ➔n
不為快樂數- 若不存在循環, 經過
x
步後fast
必先變成 1, 然後再經過x
步後slow
才會接著變成 1
class Solution { |
- time:$O(log(n))$ ➔ 令
k
為n
除以10
的次數, $\dfrac{n}{10^k} = 1 ➔ k = log(n)$ - space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論