【问题标题】:LeetCode Reverse Integer (ValueError: invalid literal for int() with base 10: '' )LeetCode Reverse Integer (ValueError: invalid literal for int() with base 10: '' )
【发布时间】:2021-07-10 17:39:45
【问题描述】:

给定一个带符号的 32 位整数 x,返回 x 并将其数字反转。如果反转 x 导致值超出有符号 32 位整数范围 [-2**31, 2**31 - 1],则返回 0。

假设环境不允许您存储 64 位整数(有符号或无符号)。

这是我的提交

class Solution(object):
def reverse(self, x):
    sp= str(abs(x))[::-1].lstrip("0")
    ans= int(sp)
    
    if x > 0 :
        return ans
    else: 
        return -1*ans

int() 方法应该允许我传递一个字符串值(“12”),但它返回一个错误,指出它是 int() 的无效文字。

第 3 行中的变量 spstr 而不是 float,所以我不知道为什么它在 leetcode 提交页面上没有运行,因为它运行在 VSCode 上没问题。

有没有我遗漏的评分准则?

而且,这是我得到的值错误

【问题讨论】:

  • 您在反转之前清空字符串,即'' 不是int。试试sp = str(abs(x))[::-1]
  • 考虑当值为0时会发生什么。

标签: python algorithm runtime-error


【解决方案1】:

原代码有两个问题:(1)它不会处理零,(2)问题描述中的范围检查缺失。

对于零,字符串表示为"0"。但是在调用lstrip("0") 之后,它将是空字符串,int 不会接受。这可以通过对零进行特殊情况检查来解决。一个更简单的解决方法(由 Mark 建议)是不去除前导零。

对于范围检查,只需添加一个检查以在值超出范围时返回零。

这是一个包含两个修复程序的更新版本。请注意,此版本省略了 strip("0") 调用,它修复了零大小写:

class Solution(object):
    def reverse(self, x):
        sp = str(abs(x))[::-1]
        ans = int(sp)

        if x < 0:
            ans = -ans

        if ans < -2**31 or ans > 2**31 - 1:
            return 0

        return ans

这应该能正确处理所有的测试用例。

【讨论】:

    【解决方案2】:

    错误说您尝试 int() 无字符串或字母不是数字,因此请在 int()

    之前检查变量 sp

    试试这个

    class Solution(object):
    def reverse(self, x):
        sp= str(abs(x))[::-1].lstrip("0")
        if not sp:
            return 0
        ans= int(sp)
        
        if x > 0 :
            return ans
        else: 
            return -1*ans
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2022-01-09
      • 2019-04-16
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多