<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;
}