首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >双指针-202.快乐数-力扣(LeetCode)

双指针-202.快乐数-力扣(LeetCode)

作者头像
白天的黑夜
发布于 2025-10-22 15:48:45
发布于 2025-10-22 15:48:45
1740
举报

一、题目解析

我们结合示例来看看

(鸽巢原理:有n个巢,n+1只鸽子,至少有一个巢的鸽子数大于1,。我们可以知道int的最大值为2.1x10^9,我们取9999999999,这比int大的多了,这时它的平方数为9^2x10=810,所以我们得到了一个范围及int产生的平方数的范围【1,810】,当经历811次操作后,根据鸽巢原理,必然会出现一个相同的数,即会出现循环)

看着这个环大家是不是很熟悉,这也是能用双指针的原因。

二、算法原理

平常的双指针我们都用于记录数组下标或者就是指针,那么我们这里该怎么处理呢?我们能发现平方数是不断更新的,所以我们可以用平方数的值用于做双指针。

成环问题多用于快慢指针(双指针的一种),slow走一步,fast走两步,这里就是更新平方值的次数。

我们的循环条件为slow != fast,为了避免赋值时slow和fast值相同导致不能进入循环,我们可以让fast指向下一个平方数,为了方便计算平方数,我们需要自己实现一个函数去计算平方数。对于最后返回的bool值,我们只需要对相遇位置的值是否等于1即可。

现在可以根据原理去自己实现一下,202. 快乐数 - 力扣(LeetCode)

三、代码示例

由于c语言版和c++版差别不大,所以这里展示c++版。

看到这里,如果对您有所帮助请留下一个免费的赞,期待我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档