202. 快乐数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
private:
set<int> nums;
public:
int split_number(int n){
int sum = 0;
while(n > 0){
int sig = n % 10;
sum += (sig * sig);
n = n / 10;
}
return sum;
}

bool isHappy(int n) {
int re = split_number(n);
while(true){
if(nums.find(re) != nums.end()){
return false;
}
nums.insert(re);
re = split_number(re);
if(re == 1){
break;
}
}
return true;
}
};

从快乐数的这个行为来看,一个数拆分之后计算的结果是确定的。

建立一张哈希表,如果计算出来的结果有在其中,就直接退出循环,表面这个数不是快乐数,不然你就一直死循环了。