202.快乐数

122 阅读1分钟

202.快乐数

LeetCode


描述:

image-20220412214322937


思路:

  • 单纯判断一个数是否是快乐数是比较简单的, 但是题目的问题在于, 有非快乐数在判断的过程中, 可能造成死循环, 可以用unordered_set存储过程中的结果, 当发现有重复, 则为进入了死循环, 直接退出即可.


代码:

/*
 * @lc app=leetcode.cn id=202 lang=cpp
 *
 * [202] 快乐数
 */

// @lc code=start
class Solution
{
public:
    bool isHappy(int n)
    {
        unordered_set<int> result;

        int sum = 0;
        while (1)
        {
            while (n)
            {
                sum += (n % 10) * (n % 10);
                n /= 10;
            }
            if (sum == 1)
            {
                return true;
            }
            if (result.count(sum))
            {
                return false;
            }
            result.insert(sum);
            n = sum;
            sum = 0;
        }

        return false;
    }
};