题目大意
求一个数是不是happy number(定义戳这里)
我的思路
数字如果不是happy number,就会一直被困在循环里,因为会出现同一个数字出现两次的情况。直接的思路是用set,如果一个数字出现了两次,就返回false。
别人的思路
我的做法空间复杂度略高。看了下面别人的解,空间复杂度仅为N1。大致就是设立快慢两个指针,如果存在环,两个指针一定会相遇。
参考:Floyd’s Cycle Detection Algorithm
别人的代码
int digitSquareSum(int n) {
int sum = 0, tmp;
while (n) {
tmp = n % 10;
sum += tmp * tmp;
n /= 10;
}
return sum;
}
bool isHappy(int n) {
int slow, fast;
slow = fast = n;
do {
slow = digitSquareSum(slow);
fast = digitSquareSum(fast);
fast = digitSquareSum(fast);
if(fast == 1) return 1;
} while(slow != fast);
return 0;