title: Leetcode 202.快乐数
hidden: true
tags:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
$1^2 + 9^2 = 82$
$8^2 + 2^2 = 68$
$6^2 + 8^2 = 100$
$1^2 + 0^2 + 0^2 = 1$
就求呗…
把每次的结果存在哈希堆里来查重
int toNextInt(int x) {
int digits = log10(x)+1;
int res = 0;
while(x != 0) {
res += (x%10) * (x%10);
x /= 10;
}
return res;
}
class Solution {
public:
unordered_set<int> nums;
bool isHappy(int n) {
int res = n;
while(res != 1) {
if(nums.find(res) == nums.end()) {
nums.insert(res);
res = toNextInt(res);
}else {
return false;
}
}
return true;
}
};