class Solution {
public:
// 哈希表
bool f1(int n) {
unordered_set<int> rec;
auto dfs = [&](auto&& dfs, int num) -> bool {
int ans = 0;
while(num > 0) {
int last = num % 10;
ans += last * last;
num /= 10;
}
if(ans == 1)
return true;
if(rec.count(ans))
return false;
rec.insert(ans);
return dfs(dfs, ans);
};
}
// 双指针
bool f2(int n) {
auto get = [&](int num) -> int {
int ans = 0;
while(num > 0) {
int last = num % 10;
ans += last * last;
num /= 10;
}
return ans;
};
int slow = n, fast = get(n);
while(fast != 1 && slow != fast) {
slow = get(slow);
fast = get(get(fast));
}
return fast == 1;
}
bool isHappy(int n) {
return f2(n);
}
};