天天看點

LeetCode 202.Happy Number (快樂數)

題目描述:

編寫一個算法來判斷一個數是不是“快樂數”。

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

示例: 

輸入: 19
輸出: true
解釋: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
           

AC C++ Solution:

class Solution {
public:
    bool isHappy(int n) {
        
        if(n == 0) return 0;
        
        set<int> s;         //用一個set存儲每次平方之後的數字
        int sum = 0;
        while(1)
        {
            int tmp = n;
            sum = 0;
            while(tmp > 0)
            {
                int a = tmp%10;
                sum += a*a;
                tmp = tmp /10;
            }
            auto itr = s.find(sum);
            if(itr != s.end()) break;       //當在set中查找到相同的數字時,退出循環
            s.insert(sum);
            n =sum;          //n設定為本次sum的值,作為下一次循環的初始值
        }
        if(sum ==1) return 1;
        return 0;
        
    }
};