首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Happy number算法

Python中的Happy number算法
EN

Stack Overflow用户
提问于 2020-03-25 18:07:48
回答 5查看 716关注 0票数 1

我正在解决Happy number算法问题

https://leetcode.com/problems/happy-number/

这是我的代码。

代码语言:javascript
复制
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循环,但每次我尝试修复我的代码时,我都会遇到更多的错误……

我不知道如何修复这个代码。你能给我一个提示吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-03-25 18:31:28

你需要使用一个列表来保存你已经经历过的数字,如果你碰巧再次陷入其中一个,你就会知道你正处于一个循环中。

要停止您遇到的问题,您应该在发生以下情况之一时退出while:

1 -结果恰好是1。

2-您在已检查的列表中找到您的结果。

鉴于此,以下是如何修复代码的方法,但我建议您在检查解决方案之前先尝试一下:

代码语言:javascript
复制
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")
票数 2
EN

Stack Overflow用户

发布于 2020-03-25 18:31:20

试试这样的东西。如果我没弄错,停止循环的主要条件是得到相同的数字和。您可以将它们存储在列表(元组)中以进行检查。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-03-25 18:48:48

问题是你会在循环为'1‘之前终止它。您需要在循环条件下检查nums != '1'

代码语言:javascript
复制
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")           
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60846606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档