前言
题目: 202. 快乐数
文档: 代码随想录——快乐数
编程语言: C++
解题状态: 忽略已知条件
思路
无限循环即意味着会出现重复的数。当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
另外就是要关注如何快速准确求和。
代码
哈希表法
class Solution {
public:
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> uset;
while (1) {
int sum = getSum(n);
if (sum == 1) return true;
if (uset.find(sum) != uset.end()) {
return false;
} else {
uset.insert(sum);
}
n = sum;
}
}
};
- 时间复杂度: O ( l o g n ) O(logn) O(logn)
- 空间复杂度: O ( l o g n ) O(logn) O(logn)