链接:202. 快乐数 - 力扣(LeetCode)
算法原理:
鸽巢原理(抽屉原理):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;}
}