题目:
代码(首刷自解 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。