Python快慢指针法

本文介绍了如何使用Python的快慢指针法解决LeetCode中的202题——快乐数。快乐数是指通过将数位相加的平方和重复此过程,最终会到达1的数。不快乐数则会进入循环。利用哈希表记录中间结果,当出现循环时即可判断为不快乐数。快慢指针法中,slow指针每次前进一位,fast指针前进两位,通过这种方式判断数是否为快乐数,空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天在做leetcode的202. 快乐数让人快乐不起来的数哈哈,快乐数比如82,有以下快乐的过程:

8^2+2^2=686^2+8^2=1001^2+0^2+0^2=1

        不快乐的数比如2,有以下不快乐过程:

2^2=44^2=161^2+6^2=373^2+7^2=58,【5^2+8^2=89】,

8^2+9^2=145, 1^2+4^2+5^2=424^2+2^2=121^2+2^2=5

5^2=252^2+5^2=292^2+9^2=85,【8^2+5^2=89

        不会做呀,看解析知道快乐数要么会到1,要么会进入循环。

        由于9^2=81,13位数如果全都是9有9^2*13=1053,并且会很快降到3位数。因此用哈希表存一下,直到得到的数在哈希表里,意思是出现循环了,一定是不快乐数哈哈,return False就行。哈希表选什么好?可以考虑一下空间复杂度的问题。

ps:几位数要一位一位抽取出来,可以用求余,python有整除求余函数(商,余数)=divmod(a,b)

        另外遇到循环不能用套娃(有个三角恋题用套娃挺快的),可以用指针快慢法。具体用法如下:

        slow指针是龟龟,fast指针是兔,起点也让fast比slow快一步,后续跑起来,slow走一步,fast跳过一步 走两步,循环的话总有fast追上slow的一天。如果没有循环的话,fast的跳动能很快判断这是快乐数(1^2=1)。

        指针通常需要常数的额外空间,所以快慢指针空间复杂度为O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值