202. 快乐数 - 力扣(LeetCode)

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

我们可以看到,第一个例子到最后符合条件,变为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;
    }

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐