双指针
解法思路:如图

根据如图原理,我们可以使用快慢指针轻松且愉快的高效解决问题。
【不了解快慢指针的看这里】快慢指针原理很简单,想像一下你和你女朋友一起在赛道同时起跑,你的速度肯定是更快的(假设你一步等于她两步),那么你们两个最快遇见的时候是你跑了两圈而她只跑了一圈(原理:你的路程是她的两倍时相遇)。
我们定义slow和fast指针,fast的速度是slow的两倍,不要考虑3倍或n倍,可能会出问题,想要了解问什么不能n倍可以查一查,这里不做讲解
代码实现:
java
public int sum(int n){
int num=0;
while(n!=0){
num+=Math.pow(n%10,2);
n/=10;
}
return num;
}
public boolean isHappy(int n){
int slow = n;
int fast = sum(n);
while(slow!=fast){
slow=sum(slow);
fast=sum(sum(fast));
}
return slow==1;
}