1. 程式人生 > 實用技巧 >LeetCode202. 快樂數

LeetCode202. 快樂數

按照題目說的規則,不是快樂數的數,會陷入無限迴圈,永遠得不到1,比如18,在第4次迭代的時候計算出來的n是58,在第12次迭代之後n的值還是58,所以就陷入了無限迴圈之中,所以18不是快樂數。

因此,我們可以用一個set,對於每一次迭代就算出來的n,都先去判斷set中是否已經存在這個值了,如果已經存在,說明計算陷入了迴圈,這個數就不是快樂數。

具體做法:每次迴圈先把當前n的值加入集合中,方便之後判斷迴圈,每一次計算n的下一次迭代得到的值newN,newN就是把n的所有位置的數的平方和相加得到的數,然後把newN的值再賦給n。
只要n的值不為1(為1就可以返回true了),或者n的值在set中沒有出現過,就繼續迴圈。

程式碼如下:

class Solution {
public:
    bool isHappy(int n) {
        set<int> hash;
        while(true) {
            hash.insert(n);
            int newN = 0;                        //newN是把n的每一位的數的平方和相加得到的數
            while(n != 0) {
                newN += pow(n % 10, 2);
                n /= 10;
            }
            n = newN;                           
            if(n == 1) {                        //退出迴圈有兩種情況:(1)n為1(說明這是一個快樂數)
                break;
            }
            if(hash.count(n) != 0) {            //(2)之前的計算中已經出現了現在這個數,說明陷入了無限迴圈,這不是一個快樂數
                return false;
            }
        }
        return true;
    }
};