1. 程式人生 > >LeetCode 202.快樂數 Happy Number

LeetCode 202.快樂數 Happy Number

題目連結

一個“快樂數”定義為,對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變成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;
    }
};