LeetCode Reverse Integer (ValueError: invalid literal for int() with base 10: '' )

LeetCode Reverse Integer (ValueError: invalid literal for int() with base 10: '' )

给定一个带符号的 32 位整数 x,return x 的数字反转。如果反转 x 导致值超出带符号的 32 位整数范围 [-2**31, 2**31 - 1],则 return 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"),但它 return 是一个错误,指出它是 int() 的无效文字。

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

有没有我错过的评分指南?

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

错误说你尝试 int() None 字符串或字母而不是数字所以在 int()[=17 之前检查变量 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

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

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

对于范围检查,如果值超出范围,只需添加对 return 零的检查。

这是包含两个修复程序的更新版本。请注意,此版本省略了 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

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