学习安排根据《代码随想录》~leetcode202
题目虽然简单,但是思考后发现,逻辑上还是存在困难的,需要一定的观察能力。
自己只想到了三种情况:
1. 计算结果得到1;
2.计算结果一直循环;
3.计算结果无穷
但因为第三个情况不知道怎么写,所以还是瞅了一眼答案。
通过官方解析知道,第三种情况是不可能存在的。
因为从四位数以及四位数以后,这些数的加和永远会少一位。比如一个四位数,最大加和为324,此时已经为三位数了。
所以推出不存在无穷大的情况。
得到这个点拨后,就好写了。
class Solution {
public:
bool isHappy(int n)
{
int result=0;
int m;
unordered_set<int>s;
bool t=false;
while(1)
{
while(n>0)
{
m=n%10;
result+=pow(m,2);
n=n/10;
}
if(result==1)
{
t=true;
break;
}
if(s.count(result))
{
break;
}
else
{
n=result;
s.insert(result);
}
result=0;
}
return t;
}
};
这里是自己写的并改正后的代码,第一次写的时候出现了超出时间限制的提示,当时怎么也不知道为啥会出现这种错误,跟官方答案以及代码随想录答案对比,发现也没有什么不一样的地方。
代码随想录里的答案,知识把计算结果用一个函数封装起来而来而已,也是用到了两次循环。
于是,我就只能在VS上调试了,后来发现我在 哈希表里插入result后,没有及时将result重置为0,这样导致以来结果出现错误,而来会出现无限循环的情况。
总结:简单题逻辑不清晰也不好做出来;循环的每一步都要重新验算一遍。