算法原理:
鸽巢原理(抽屉原理):n个巢穴,n+1个鸽子,至少有一个巢穴里的鸽子 > 1。
可以抽象为:判断链表是否有环,环里的数是否为1
解法:快慢双指针
1.定义快慢指针(可以用数充当指针)
2.慢指针每次向后移动一步,快指针每次向后移动两步
3.判断相遇时的值即可
class Solution {
public boolean isHappy(int n) {
int slow = n, fast = bitSum(n);
while(slow != fast){
slow = bitSum(slow);
fast = bitSum(bitSum(fast));
}
return slow == 1;
}
public int bitSum(int n){//返回 n 这个数每一位上的平方和
int sum = 0;
while(n != 0){
int t = n % 10;
sum += t * t;
n /= 10;
}
return sum;
}
}