题解 | #快乐数#

快乐数

https://www.nowcoder.com/practice/293b9ddd48444fa493dd17da0feb192d

//*******************************************************************
//代码随想录中提到的快乐数。通过使用哈希表来检查中途的计算结果是否曾经出现过。如果出现过则代表进入无限循环了。
#include <unordered_set>
#include <vector>
class Solution {
  private:
    unordered_set<int>TempSum;
  public:
    bool happynum(int n) {
        // write code here
        if (n == 1)
            return true;
        vector<int>EveryBitNums;
	    TempSum.clear();
        while (n != 1) {
            EveryBitNums.clear();
            while (true) {//
                int rem = n % 10; //余数
                EveryBitNums.emplace_back(rem);

                if (rem ==
                        n) { //如果余数和本体相同,代表已经处理到了个位数,可以结束了。
                    break;
                } else {
                    n = n / 10; //余数处理掉了,因此直接除10,前进。
                }
            }
            //内层循环结束后,现在EveryBitNums里面存了每一位数字。
            int sum = 0;
            for (const int num : EveryBitNums) {
                sum += num * num;
            }
            if (TempSum.count(sum) == 1) { //检查这个Sum是否曾经出现过
                return false;
            } else {
                TempSum.emplace(sum);
            }
            n = sum;
        }
        return true;
    }
};

全部评论

相关推荐

头像
09-29 16:18
门头沟学院 Java
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务