LeetCode 202.快樂數 Happy Number
阿新 • • 發佈:2018-12-11
一個“快樂數”定義為,對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變成1,也可能是無限迴圈但始終變不到1.如果可以變為1,那麼這個數就是快樂數。
例如:
輸入19
1²+9²=82
8²+2²=68
6²+8²=100
1²+0²+0²=1
所以19是快樂數。
問題的難度在於怎麼結束迴圈
我一開始想著,任何正整數,經過若干次的運算後,總會小於100。然後自己算出100以內的快樂數,然後與結果一一比較,有相等的,則說明是快樂數。
然後我錯了,因為100以內的快樂數,我沒找全。
然後想著,任何正整數,經過若干次的運算後,總會小於10。而且,10以內的快樂數很好找,就1和7。
程式碼如下:
class Solution { public: bool isHappy(int n) { int sum,k,j; while(n>=10)//經過若干次計算後,總會小於10 { sum=0; k=n; while(k)//每個位置的數字的平方和 { j=k%10; sum+=j*j; k/=10; } n=sum; } if(n==1||n==7) return true;//至於7是怎麼得出來的,因為1~9裡,只有1和7結束了迴圈 else return false; } };