Leetcode - Happy Number算法总结

Happy Number算法submit了好几次,才最终测试通过,总结一下。

1. Happy Number定义

给定一个整数,将每一位数字的平方加起来,得出来一个和,继续将这个和的每一位数字的平方加起来,不断循环,如果最终的和是1的话,那么该整数即为Happy Number.

举例:
Input: 19
Output: true
Explanation:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章