c++:
class Solution {
public:
bool isHappy(int n) {
unordered_set<int>s;
while(1){
int sum = getSum(n);
if(sum == 1){
return true;
}
// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return false
if(s.find(sum) != s.end()){
return false;
}else{
s.insert(sum);
}
n = sum;
}
}
// 取数值各个位上的单数之和
int getSum(int n){
int sum = 0;
while(n){
sum += (n%10)*(n%10);
n = n/10;
}
return sum;
}
};
go:
func isHappy(n int) bool {
m := make(map[int]bool)
for n != 1 {
n, m[n] = getSum(n),true//n!=1 而且n没有出现过,就进入循环,否则退出循环
}
return n == 1
}
func getSum(n int)int{
sum := 0
for n > 0{
sum += (n%10)*(n%10)
n /= 10
}
return sum
}