题解 | #快乐数#
快乐数
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;
}
};
查看18道真题和解析