在做题中学习(38):快乐数

2023-12-22 14:05:29

202. 快乐数 - 力扣(LeetCode)

理解:根据定义一共有两种情况

1.最后变为1

2.最后变为环

思路:可以把两个情况都认为有环,第一个是环一直为1

(快满指针法) 定义一个快指针和慢指针,慢指针走一步,快指针走两步。

而这里的指针不是真正的指针,可以用整型值代替它所代表的意义,比如:19会变化为82,那slow就由19经过平方和变化为82,fast走两步相当于19变化为82在变化为68,相当于变化两次,用这样伪指针的做法来表示快慢指针。

解释一下下面代码:把求平方和封装成函数更方便,fast首先定义为bitsum(n)是因为若定义为n循环进不去。

class Solution 
{
public:
    int bitsum(int n)
    {
        int sum = 0;
        while(n)
        {
            int t = n%10;
            sum += t*t;
            n = n/10;
        }
        return sum;
    }
    bool isHappy(int n) 
    {
        int slow = n, fast = bitsum(n);
        while(slow!=fast)
        {
            slow = bitsum(slow);
            fast = bitsum(bitsum(fast));
        }
        return slow ==1;
    }
};

文章来源:https://blog.csdn.net/yiren_liusong/article/details/135149984
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。