快慢指標趣解快樂數問題

2021-09-27 16:46:10 字數 1076 閱讀 3436

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

乙個「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。

我們的第一感官,這道題真簡單 ^>^ ! 我也是這麼想的,不就是求各個位上的數字然後平方和,再加個迭代就能證明它是所謂的快樂數了嘛!

然而,題目清楚地告訴我們,並不是所有的數都是快樂數。

在數字海洋裡有一些有毒性的魚兒,他們不喜歡 1 這個數字……

「不快樂數」會在這個過程中不斷迴圈,可怕的事發生了,你的驗證快樂數的程式會不斷地迴圈……最後可能還會溢位……

遇到這個問題,我第乙個想法當然是在這個迴圈過程中找到這個不快樂數,並給出判斷……

怎麼找呢?

既然它是迴圈的,那麼它一定有乙個週期,,,,,

難道我要儲存這些過程數,,,,然後乙個乙個比對嗎?

想想就不寒而慄。。。。

這得需要犧牲多少記憶體和時間。。。。

所以啊,我們換乙個思路。

好吧,墨默很笨,這個思路是參考大佬的,,,,,

大佬說,我們使用快慢指標的方法,,,,墨默孤陋寡聞,第一次聽說這個所謂的快慢指標,,,

廢話少說,先貼**:

public:

int fast=n;

int slow=n;

dowhile(slow!=fast);

if(fast==1)

return true;

else return false;

}int squaresum(int m)

return squaresum;

}

顯而易見,fast是快指標,slow是慢指標。

相應的當這個數是「快樂數」時快指標會先到達1,顯而易見,快指標到達1 之後將不再變化,慢指標最終也會到達1 ,屆時就可以終止迴圈,返回true.

墨默後來也知道了:

可憐之前並不知道啊。。。。

快慢指標解決快樂數問題

編寫乙個演算法來判斷乙個數是不是 快樂數 乙個 快樂數 定義為 對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。我們的第一感官,這道題真簡單 我也是這麼想的,不就是求各個位上的...

快慢指標遍歷 202 快樂數

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

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

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