快樂數 快慢指標(判斷成環思路)

2021-10-05 15:14:59 字數 1329 閱讀 6540

編寫乙個演算法來判斷乙個數 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,那麼這個數就是快樂數。我們的第一感官,這道題真簡單 我也是這麼想的,不就是求各個位上的...