[LeetCode]202. 快乐数(java实现)快慢指针判断环
1. 题目
2. 读题(需要重点注意的东西)
思路(快慢指针判断环):
由于n最大是,即2147483647,也就是2.1×109 < 910,因此每次变化,最大的数也不会超过9*9*10 = 810
。
如果最终的循环里包含1,那么整个循环都是1;如果最终的循环不是1,那么整个循环中都不可能出现1。因此我们只需要判断环中的任意一个数是不是1即可。
判断环: 快慢指针判断环,如果存在环,则快慢指针一定能在环内相遇,详见 [LeetCode]141. 环形链表(java实现)快慢指针判断环
因此,只需要在快慢指针相遇时,判断当前节点是不是1即可判断n是不是快乐数。
3. 解法
---------------------------------------------------解法---------------------------------------------------
class Solution {
public boolean isHappy(int n) {
int fast=n;
int slow=n;
do{
slow=get(slow);
fast=get(get(fast));
}while(fast != slow);
return fast == 1;
}
public int get(int x){
int res = 0;
while(x != 0){
res += (x % 10) * (x % 10); // 取出每一位平方
x /= 10;
}
return res;
}
}
可能存在的问题: