classSolution {
public:
boolisHappy(int n){
int sum = 0;
unordered_set<int> sumSet;
while(1){
sum = 0;
while(n > 0){
int digit = n % 10;
sum += (digit * digit);
n /= 10;
}
if(sum == 1) returntrue;
if(sumSet.find(sum) != sumSet.end()) returnfalse;
else sumSet.insert(sum);
n = sum;
}
returnfalse;
}
};
classSolution {
public:
unordered_set<int> sumSet;
intgetNext(int num){
int sum = 0;
while(num > 0){
int digit = num % 10;
sum += (digit * digit);
num /= 10;
}
return sum;
}
boolisHappy(int n){
while(n != 1 && sumSet.find(n) == sumSet.end()){
sumSet.insert(n);
n = getNext(n);
}
return n == 1;
}
};
classSolution {
public:
intgetNext(int num){
int sum = 0;
while(num > 0){
int digit = num % 10;
sum += (digit * digit);
num /= 10;
}
return sum;
}
boolisHappy(int n){
int slow = n;
int fast = getNext(n);
while(fast != 1 && fast != slow){
slow = getNext(slow);
fast = getNext(getNext(fast));
}
return fast == 1;
}
};