leetcode-master/problems/0202.快乐数.md

1.4 KiB
Raw Blame History

题目地址

https://leetcode-cn.com/problems/happy-number/

思路

这道题目重点是,题目中说了会 无限循环 那么也就是说 求和的过程中sum会重复出现这对我们解题很重要这样我们就可以使用哈希法来判断这个sum是否重复出现如果重复了就是return false 否则一直找到sum为1为止

还有就是求和的过程,如果对 取数值各个位上的单数操作不熟悉的话,做这道题也会比较艰难

C++代码

class Solution {
public:
    // 取和
    int getSum(int n) {
        int sum = 0;
        while (n) {
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        unordered_set<int> set;
        while(1) {
            int sum = getSum(n);
            if (sum == 1) {
                return true;
            }
            // 如果这个sum曾经出现过说明已经陷入了无限循环了立刻return false
            if (set.find(sum) != set.end()) {
                return false;
            } else {
                set.insert(sum);
            }
            n = sum;
        }
    }
};

笔者在先后在腾讯和百度从事技术研发多年利用工作之余重刷leetcode本文 GitHubhttps://github.com/youngyangyang04/leetcode-master 已经收录欢迎starfork共同学习一起进步。