202. Happy Number
题目
题目大意是通过一个数,不断分解求平方和,然后最后能得到1,那么这个数字称为happy number。
我的代码:
通过解析数字,将整数解析成一个数字列表,判断循环后如果发现成为自己本身,那么就退出。
但提交后,发现数字2会出现一个自己之前没有预料到的问题:一个数可能不断迭代后没有返回它本身。
我想到两种解决方案,
**解决方案1:**就是将所有之前得到过的数字记录下来,判断有没有陷入其他数字的循环。
[较优的解决方案,但是有没有可能一个数无限迭代,确没有重复过(可能性不大),应该是一个完美的方法,没有验证]
解决方案2,就是简单粗暴的设置一个最大循环次数,超过了那个次数,即视为该数字不可能。
[也许,不太严谨,而且怎么设置这个次数?]
当时图个简单,设置了最大循环次数15,通过了测试。
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
def parseint(n):
nums=[]
while n>0:
nums.append(n%10)
n/=10
return nums
j=0
do=True
initn=n
while do or initn!=n:
do=False
nums=parseint(n)
n=0
for i in nums:
n+=i*i
if n==1:
return True
j+=1
if j>15:
return False
return False
优秀代码(使用了我第一种的解决方案)
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
orig = []
while 1:
sum = 0
while n > 0:
sum += (n % 10) ** 2
n /= 10
if sum == 1:
return True
else:
if sum in orig:
return False
orig.append(sum)
n = sum