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