抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

编写一个算法来判断一个数 n 是不是快乐数。


思路

  • 存在循环(重复)时不满足快乐数条件,返回 false。因此用哈希集合存储已经出现过的 sum 值。

学习点

代码

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
30
31
32
33
34
35
class Solution {
public:
long long cal_sum(int &n)
{
// 从个位开始保存
long long sum = 0LL;
while (n > 0)
{
int digit = n % 10;
sum += digit * digit;
n /= 10;
}

return sum;
}

bool isHappy(int n) {
// 哈希表,如果存在相同值,说明存在循环,返回 false
unordered_set<int> us;

auto sum = cal_sum(n);
while (sum != 1)
{
// 存在循环
if (us.count(sum))
return false;
// 暂时没有循环
us.insert(sum);
n = sum;
sum = cal_sum(n);
}
// 退出 while,说明满足 sum == 1
return true;
}
};