我正在解决Happy number算法问题
https://leetcode.com/problems/happy-number/
这是我的代码。
class Solution:
def isHappy(self, n):
nums = str(n)
while len(nums)!=1:
result = 0
for num in nums:
result += int(num) * int(num)
nums = str(result)
if (nums == '1'): print("True")
else: print("False")如果输入中1的总数是7,则它有错误。比如"1111111,10111111","11101111","11011111“
这些数字必须为真,但结果为假。
我知道它需要再重复一次while循环,但每次我尝试修复我的代码时,我都会遇到更多的错误……
我不知道如何修复这个代码。你能给我一个提示吗?
发布于 2020-03-25 18:31:28
你需要使用一个列表来保存你已经经历过的数字,如果你碰巧再次陷入其中一个,你就会知道你正处于一个循环中。
要停止您遇到的问题,您应该在发生以下情况之一时退出while:
1 -结果恰好是1。
2-您在已检查的列表中找到您的结果。
鉴于此,以下是如何修复代码的方法,但我建议您在检查解决方案之前先尝试一下:
def isHappy(self, n):
checked = []
nums = str(n)
while nums != '1' and not (nums in checked):
checked.append(nums)
result = 0
for num in nums:
result += int(num) * int(num)
nums = str(result)
if (nums == '1'): print("True")
else: print("False")发布于 2020-03-25 18:31:20
试试这样的东西。如果我没弄错,停止循环的主要条件是得到相同的数字和。您可以将它们存储在列表(元组)中以进行检查。
class Solution:
def isHappy(self, n: int) -> bool:
nums = str(n)
checked = []
current_sum = 0
while current_sum != 1:
current_sum = sum(int(item)**2 for item in nums)
if current_sum not in checked:
checked.append(current_sum)
else:
return False
nums = str(current_sum)
return True发布于 2020-03-25 18:48:48
问题是你会在循环为'1‘之前终止它。您需要在循环条件下检查nums != '1'。
class Solution:
def is_happy(self, n):
checked_values = set()
nums = str(n)
while nums!='1':
result = 0
for num in nums:
result += int(num) * int(num)
nums = str(result)
if nums in checked_values:
print("False")
return
else:
checked_values.add(nums)
print("True") https://stackoverflow.com/questions/60846606
复制相似问题