力扣202.快乐数(medium)(双指针)
·

我们先用给出的两个例子看一下


我们可以看到,第一个例子到最后符合条件,变为1,第二个例子不符合条件,从4开始无限循环
实际上我们可以把这两个例子都看成一种无限循环的类型,只不过符合条件时循环的数一直是1,不符合条件时循环的数不是1 如下图

看到这幅图是不是很熟悉,一下就想到了链表中快慢指针判断是否循环,只不过这道题不用判断是否循环,而是确定是循环的,我们要判断的是快慢指针相遇时其对应的值是否为1,其中,指针为数,slow指针一次变化一次,fast指针一次变化两次
int bitsquare(int x)
{
int num=0;
while(x)
{
int t=x%10;
num+=t*t;
x/=10;
}
return num;
}
bool isHappy(int n) {
//定义快慢指针
int slow=n,fast=bitsquare(n);
while(slow!=fast)
{
//慢指针走一步,快指针走两步
slow=bitsquare(slow);
fast=bitsquare(bitsquare(fast));
}
//判断相遇时是否为1
return slow==1;
}

更多推荐
所有评论(0)