思路:
模拟法。
拆分成位数,判断平方和是否为1 以及 该数是否曾经出现过,为1返回true,曾经出现过返回false;
class Solution {
public:
bool isHappy(int n) {
vector<int> digits;
int sum = 0;
unordered_set<int> exist;
exist.insert(n);
while(1) {
while(n != 0) {
int num = n % 10;
digits.push_back(num);
n = n / 10;
}
for(int i = 0; i < digits.size(); ++i) {
sum += digits[i] * digits[i];
}
if(sum == 1) {
return true;
}
if(exist.find(sum) != exist.end()) {
return false;
}
n = sum;
exist.insert(n);
sum = 0;
digits.clear();
}
return false;
}
};
本文通过模拟法实现快乐数的判断,涉及拆分数字、平方和计算以及避免循环的关键步骤。
993

被折叠的 条评论
为什么被折叠?



