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

<aside> 💡

这题的重点不是判断一个数是不是快乐数,而是当一个数不是快乐数时,如何从无限循环中脱出

思路:将判断过的数放入set,如果这个数在之后又出现了说明就陷入了循环,即这个数不是快乐数

</aside>

bool isHappy(int n) {
    unordered_set<int> st;

    while (true) {
        int sum = 0;
        while (n >= 10) {
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        sum += n * n;
        if (sum == 1) {
            return true;
        } else {
            if (st.find(sum) == st.end()) {
                st.insert(sum);
            } else {
                break;
            }
        }
        n = sum;
    }
    return false;
}