快慢指针法
- 思路:
- 按照规则计算下去,要么是快乐数,要么最终进入循环里面;
- 快慢指针进行“龟兔赛跑”,快指针总会追上慢指针;如果没有成快乐数,那么就是有环;
- 定义运算规则:
-
int next(int n) { int sum = 0; while (n > 0) { sum += (n % 10) * (n % 10); n = n / 10; } return sum; }
-
- 整体代码:
class Solution {
public:
bool isHappy(int n) {
int slow = n;
int fast = next(n);
while ((fast != 1) && (slow != fast)) {
slow = next(slow);
fast = next(next(fast));
}
return (fast == 1);
}
private:
int next(int n) {
int sum = 0;
while (n > 0) {
sum += (n % 10) * (n % 10);
n = n / 10;
}
return sum;
}
};