leetcode reverse integer(valueerror:以10为基数的int()的文本无效:“”)

v1uwarro  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(306)

给定一个有符号的32位整数x,返回x并反转其数字。如果反转x导致值超出有符号32位整数范围[-231,231-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行中的变量sp是str而不是float,所以我不知道为什么它不在leetcode提交页面上运行,因为它在vscode上运行正常。
有没有我遗漏的评分准则?
这就是我得到的值错误

fcy6dtqo

fcy6dtqo1#

原始代码有两个问题:(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

这将正确处理所有测试用例。

a14dhokn

a14dhokn2#

错误表示您尝试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

相关问题