题解 | #快乐数#
快乐数
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; } };