做网站可以赚钱么排名前十的大学
原题链接:202.快乐数
要记住的就是,需要判断元素是否出现过,或者是否在集合里存在,就可以考虑用哈希法去做
因为是每一位都进行平方后相加得到新的数,所以需要单独写一个函数进行每位相加的运算得到最终的sum
不断重复的话,直接写一个while(1)死循环,每次循环都求得sum,此时需要判断sum是否为1 如果为1则代表是快乐数 直接返回true即可
此时直接进行判断,直接进set内查找sum,查看是否存在 如果不存在,则将sum存入set。
如果存在则代表进入了循环,直接返回false即可
关于set.find(sum) == set.end()的解释:
set.find(sum)
如果sum存在于set.,set.find 返回的是指向sum的迭代器,此时迭代器(set.find(sum))==set.end()则为为假,进入else语句内执行
如果sum不存在于set,set.find()返回的就是set.end(),此时if内的条件为set.end() ==set.end(),故为真,所以进入了if语句内执行
全代码:
class Solution {
public:int getSum(int n){int sum = 0;while(n){sum += (n % 10) * (n % 10);n /=10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while(1){int sum = getSum(n);if(sum == 1){//sum == 1则代表是快乐数 返回truereturn true;}if (set.find(sum) == set.end()) {//如果在set内没有出现过 则存入setset.insert(sum);} else {//如果sum在set内出现过,则代表进入无限循环,直接返回falsereturn false;}n = sum;}}
};