今天在做leetcode的202. 快乐数让人快乐不起来的数哈哈,快乐数比如82,有以下快乐的过程:
,
,
不快乐的数比如2,有以下不快乐过程:
,
,
,
,【
】,
,
,
,
,
,
,
,【
】
不会做呀,看解析知道快乐数要么会到1,要么会进入循环。
由于,13位数如果全都是9有
,并且会很快降到3位数。因此用哈希表存一下,直到得到的数在哈希表里,意思是出现循环了,一定是不快乐数哈哈,return False就行。哈希表选什么好?可以考虑一下空间复杂度的问题。
ps:几位数要一位一位抽取出来,可以用求余,python有整除求余函数(商,余数)=divmod(a,b)
另外遇到循环不能用套娃(有个三角恋题用套娃挺快的),可以用指针快慢法。具体用法如下:
slow指针是龟龟,fast指针是兔,起点也让fast比slow快一步,后续跑起来,slow走一步,fast跳过一步 走两步,循环的话总有fast追上slow的一天。如果没有循环的话,fast的跳动能很快判断这是快乐数()。
指针通常需要常数的额外空间,所以快慢指针空间复杂度为O(1)。