前言:
初看这道题时 ,我以为数学的魔爪已经伸入简单题里面了,看来几分钟,果断放弃。然后,看题解!看过题解之后,发现自己成小丑了。所需要的数学已经放题目里面了!
思路:
读题目!题目把最重要的两个条件加粗了,用心读题,加上敏锐的思考,发现这个过程就两种结果:无限循环与结果为一,即false与true。
查找是否重复,不重复就记录平方和,重复就返回false,找到1返回true。
代码:
class Solution { public: bool isHappy(int n) { unordered_map<int,int> has; while(1){ int sum=0; for(n;n>0;n/=10) sum+=(n%10)*(n%10); if(sum==1) return true; else if(has.count(sum)) return false; else has[sum]=1; n=sum; } } };