题解 | #快乐数#

快乐数

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;
    }
};

全部评论

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务