編寫乙個演算法來判斷乙個數 n 是不是快樂數。
「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為1,那麼這個數就是快樂數。
如果n
是快樂數就返回true
;不是,則返回false
。
示例:輸入:19
輸出:true
解釋:1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2= 1
public
boolean
(int n)
讀題,發現題目要點:
問題其實很簡單,只需要不斷的模擬這個過程變換就可以了,但是,在裡面會存在一些問題。
如果它永遠不會變成1,那麼它會怎樣變換呢?
一種想法是,它會越來越大,越來越大,最後會超出整型的範圍,但是我們可以拿個具體的例子看一下。
我們發現,其實並不會大到超出整型的範圍,而是會在乙個很小的範圍內變換
,那麼在這個小範圍的變換就只有兩種情況了。
最後變成1。
不斷迴圈。
第一種情況是我們需要的,我們只需要判斷是否出現迴圈就行了,如果出現了迴圈,並且還沒有得到1,說明之後是不可能再得到1了的。
如何判斷是否出現迴圈了呢?很簡單,只需要判斷當次得到的數是否已經出現過就行了。那麼我們可以使用乙個雜湊表儲存一下每次得到的數,如果當次得到的數已經出現過了,那麼直接返回false
。
class
solution
return ans;
}public
boolean
(int n)
return n==1;
}}
這種方法是最簡單,最直接的。
其實,判斷是否出現迴圈,還有另外一種常用的方法,快慢指標,跟判斷鍊錶是否成環思路一樣。
class
solution
return ans;
}public
boolean
(int n)
return fast==1;
}}
atfwus --writing by 2020–04-30
快慢指標遍歷 202 快樂數
2.202 快樂數 編寫乙個演算法來判斷乙個數 n 是不是快樂數。快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。如果 n 是快樂數就返回 true 不是...
快慢指標解決快樂數問題
編寫乙個演算法來判斷乙個數是不是 快樂數 乙個 快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。我們的第一感官,這道題真簡單 我也是這麼想的,不就是求各個位上的...
快慢指標趣解快樂數問題
編寫乙個演算法來判斷乙個數是不是 快樂數 乙個 快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。我們的第一感官,這道題真簡單 我也是這麼想的,不就是求各個位上的...