概述
202. 快乐数
分析
-
注意题目所给的定义的第2点,已经暗示我们可能出现无限循环的情况 -
所以,如果在模拟计算【快乐数】过程中,出现了重复的值,那么就说明陷入的无限循环,此时需要及时跳出循环,输出结果 -
我们可以考虑使用一个集合来保存在计算过程中出现的所有的值,然后每次判断新计算的值是否在其中。 如果在其中,说明循环,可判断结果
思路
集合数据结构选择?
- 因为不需要排序,所以可以使用
unordered_set
代码
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> unordered_set_int;
unordered_set_int.insert(n);
int sum = 0;
while(n) {
int temp = n % 10;
sum += temp * temp;
n /= 10;
if (n == 0) {
if (sum == 1) return true;
if (unordered_set_int.find(sum) != unordered_set_int.end())
return false;
unordered_set_int.insert(sum);
n = sum;
sum = 0;
}
}
return true;
}
};
当然,也可利用map,使用key值来作为记录保存每次计算获得的值,但是这样实际上map的value并没有被有效利用
|