题目:
代码(首刷自解 2024年1月15日):
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> hash;
while(n != 1) {
int sum = 0;
while(n/10 != 0) {
sum += (n % 10)*(n % 10);
n/=10;
}
sum += n*n;
if (hash.find(sum) != hash.end()) return false;
else hash.insert(sum);
n = sum;
}
return true;
}
};
这个题自己十分钟做出来了,虽然是道简单题,但还是说一下做题过程:
首先,根据题意将快乐数的求解过程用代码表示出来(也就是文中不含哈希表的部分)。
然后发现一个问题,如果while循环n!=1就永远不会退出循环,于是要想办法当程序知道什么时候将永远不会等于1。
很显然,当计算过程出现一个重复的数后,就永远不会等于1,自然而然想到用哈希表记录曾经的数,如果发生重复,就退出循环,返回false。