1. 程式人生 > >LeetCode202 快樂數

LeetCode202 快樂數

題目

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

示例

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

C++程式碼

首先將數字n逐位存入vector容器中(方便計算平方和),然後將其平方和與1進行比較,相同則返回true,不同則繼續。 但是注意,非快樂數永遠不會出現平方和等於1的情況,所以如果不設定停止條件,會死迴圈。可以設定為,當得到的平方和已經出現過,則說明它不是快樂數,返回false。

class Solution {
public:
    bool isHappy(int n) 
    {
        vector<int> nums;
        vector<int> save;
        getnum(n,nums);
        int sum=calculate(nums);
        while(sum!=1) //平方和等於1,跳出迴圈,返回true
        {
     	    //若平方和已經出現過,則返回false
            if(find(save.begin(),save.end(),sum)!=save.end()) return false;
            else
            {
                save.push_back(sum); //未出現,則儲存下來
                getnum(sum,nums);
                sum=calculate(nums);                
            }
        }
        return true;
        
        
    }
    void getnum(int n,vector<int> &num) //逐位儲存到vector容器中(逆序)
    {
        num.clear();
        while(n)
        {
            num.push_back(n%10);
            n/=10;
        }
    }
    int calculate(vector<int> num) //計算平方和
    {
        int sum=0;
        for(vector<int>::iterator iter=num.begin();iter!=num.end();iter++)
            sum=sum+(*iter)*(*iter);
        return sum;
    }
};