https://leetcode.com/problems/happy-number/description/?envType=study-plan-v2&envId=top-interview-150

class Solution {
public:
    int getNext(int n) {
        int res = 0;
        string str = to_string(n);
        for (auto &x: str)
            res += (x - '0') * (x - '0');
        return res;
    }
    bool isHappy(int n) {
        int slow = getNext(n), fast = getNext(getNext(n));
        while (slow != fast) {
            slow = getNext(slow);
            fast = getNext(getNext(fast));
        }
        return slow == 1;
    }
};

Time Complexity: 我也不知道
Space: O(1)

這算是經典的龜兔賽跑算法,在面對可能出現循環的結果時可以使用,這個算法就是一個跑快一個跑慢,也就是一個一次走一步,另一個一次走兩步,如果會發生循環就會導致兩個產生相同的值。
這個方法可以稍微記憶一下,因為有時候會突然出現,還是挺好用的。