Happy Number算法總結

Happy Number算法submit了好幾次,才最終測試通過,總結一下。

1. Happy Number定義

給定一個整數,將每一位數字的平方加起來,得出來一個和,繼續將這個和的每一位數字的平方加起來,不斷循環,如果最終的和是1的話,那麼該整數即爲Happy Number.

舉例:
Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

2. 算法基本思想

1)取餘運算得到最後一位數
2)求取平方,累加
3)除法運算得到十位靠左的所有數
4)如果這個除法結果爲0,那麼運算完成,開始對結果進行循環1 -3 的運算

基本的思想就可以完成了,但是有一個地方需要注意的是,如果給定的數字是2,那麼處理結果是這樣的:

2,4,16,37,58,89,145,42,20,4,16,37.......

這樣就進入了死循環了,需要做處理。

3. 參考代碼

下面是我的參考算法代碼:

class Solution {
public:
    bool isHappy(int n) {
        int result = 0;
        int temp = n;
        vector<int> resultVect;
        int numbersResult = 0;
        
        if (n < 0 || n > numeric_limits<int>::max()) return false;
        
        while (temp) {
            result += pow(temp%10, 2);
            temp = temp/10;
            
            if (temp == 0) { 
                
                // check for loops endlessly
                resultVect.push_back(result);
                numbersResult = 0;
                for (auto & x : resultVect) {
                    if (x == result) numbersResult++;
                    if (numbersResult == 2) return false;  
                }
                
                if (result == 1) return true;
                temp = result;
                result = 0;
            }
        }
        
        return false;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章