描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number/
求解
class Solution {
public:
// 方法一,使用查找表
bool isHappy(int n) {
std::unordered_set<int> record;
record.emplace(n);
while (n != 1) {
int happyNum = calHappy(n);
if (record.count(happyNum) > 0) {
return false;
}
record.emplace(happyNum);
n = happyNum;
}
return true;
}
private:
// 计算给定数字 n 的快乐数
// inline int calHappy(int n) {
// int res = 0;
// int div = n / 10;
// int rem = n % 10;
// while (div != 0 || rem != 0) {
// res += rem * rem;
// rem = div % 10; // 注意,这行代码和下行代码的先后顺序关系
// div = div / 10;
// }
// return res;
// }
inline int calHappy(int n) {
int res = 0;
while (n) {
res += (n % 10) * (n % 10);
n /= 10;
}
return res;
}
};