题意
判断一个数是否是Happy number。
思路
本来以为是道数学题,打表出来发现并没有规律,所以直接模拟就好。
当结果出现1的时候为真。
不然,会在一个圈内循环,所以可以用一个set记录一下是否出现过那个结果,或者用Floyd Circle Detection
判环。
代码
algorithm 1
class Solution {
private:
unordered_set<int> vis;
public:
int reGet(int n) {
int res = 0;
while (n) {
res += (n % 10) * (n % 10);
n /= 10;
}
return res;
}
bool isHappy(int n) {
if (n == 1) return true;
if (vis.count(n)) return false;
vis.insert(n);
return isHappy(reGet(n));
}
};
algorithm 2
class Solution {
private:
unordered_set<int> vis;
public:
int reGet(int n) {
int res = 0;
while (n) {
res += (n % 10) * (n % 10);
n /= 10;
}
return res;
}
bool isHappy(int n) {
int s = n, f = n;
do {
s = reGet(s);
f = reGet(f);
f = reGet(f);
} while (s != f);
return s == 1;
}
};