1. 程式人生 > >leetcode-----------202. 快樂數

leetcode-----------202. 快樂數

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

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

示例: 

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

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  1. 第一次寫的時候沒想到跳出迴圈的條件,總想著如果一個數本身的結果就應該是false,那麼這不就成為一個死迴圈了嗎?
  2. 搜了一下解法發現是用集合set<>來寫出迴圈的跳出條件,又學到了,又學到了。。。。。
  3. 當set<>中已經存在相同的數值時說明在這個數和在這個數的兩次出現之間的數就構成了一次迴圈,下面就只會是迴圈這些數字,這是就要return false 了。

  AC:

class Solution {
public:
    bool isHappy(int n) {
        set<int>res;
        int k,ans;
           ans=n;
        while(1)
    {
        k=ans,ans=0;
        while(k!=0)
        {
            ans=(k%10)*(k%10)+ans;
            k=k/10;
        }
        if (ans==1)
                return true;
        if (res.count(ans)==1)
                return false;
        else
           res.insert(ans);
    }
    }
};