Python 回答正确,但运行时错误反向整数-LeetCode

Python 回答正确,但运行时错误反向整数-LeetCode,python,python-3.x,Python,Python 3.x,我在LeetCode上的反向整数代码不被接受 我已经检查了我的程序是否可以返回正确答案 类解决方案: def反转自身,x:int->int: 检查\u num=strx 标志=0 如果检查数量[0]='-': 检查数量=检查数量[1:] 标志=1 elif check_num[lencheck_num-1]=“0”: check_num=check_num[:lencheck_num-1] 打印检查数量 颠倒 时间=lencheck\u num 存储=[0]*时间 对于范围内的i,请检查\u n

我在LeetCode上的反向整数代码不被接受

我已经检查了我的程序是否可以返回正确答案

类解决方案: def反转自身,x:int->int: 检查\u num=strx 标志=0 如果检查数量[0]='-': 检查数量=检查数量[1:] 标志=1 elif check_num[lencheck_num-1]=“0”: check_num=check_num[:lencheck_num-1] 打印检查数量 颠倒 时间=lencheck\u num 存储=[0]*时间 对于范围内的i,请检查\u num: num=lencheck\u num-i-1 存储[i]=检查数量[num] 打印存储[i] ifflag==1: storage.insert0,'-' 变为字符串 单线串= 对于存储中的x: oneLinerString+=x ans=InOneLinerString 返回单行字符串 def主: 导入系统 输入io def读线: 对于io.TextIOWrappersys.stdin.buffer中的行,编码为='utf-8': 屈服线。带“\n” 行=读行 尽管如此: 尝试: 行=下一行 x=内部线; ret=解决方案。reversex out=strret; 打印输出 除停止迭代外: 打破 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 主要的 对于单输入情况,我的程序返回正确的输出

Your input
123
Output
321
Expected
321
但是有错误,我的代码不被接受。 什么是问题?我应该如何修复当前代码

Finished in N/A
ValueError: invalid literal for int() with base 10: ''
Line 30 in reverse (Solution.py)
Line 47 in main (Solution.py)
Line 55 in <module> (Solution.py)

对于0的输入,由于以下原因,您的代码会将输入转换为空字符串:

elif (check_num[len(check_num)-1] == '0'):
            check_num = check_num[:len(check_num)-1]
您应该删除此elif分支,并让最终整数转换处理倒数的前导零:

ans = int(oneLinerString)  # removes leading zeros in the reversed string
您还需要注意当反转的数字超出32位有符号整数表示的范围时返回0的条件。因此,可以添加最终检查:

if not -2**31 <= ans <= 2**31 - 1:
    return 0
对示例代码进行最小的更改,有效的解决方案是:

class Solution:
    def reverse(self, x: int) -> int:
        check_num = str(x)
        flag = 0
        if(check_num[0] == '-'):
            check_num = check_num[1:]
            flag = 1

        #print(check_num)

        #reverse
        time = len(check_num)
        storage = [0] * time 
        for i in range(len(check_num)):
            num = len(check_num)-i-1
            storage[i] = check_num[num]
            #print(storage[i])

        if(flag == 1):
            storage.insert(0, '-')

        #turn to string
        oneLinerString=""
        for x in storage:
            oneLinerString += x

        ans = int(oneLinerString)  # removes leading zeros in the reversed string

        if not -2**31 <= ans <= 2**31 - 1:
            return 0

        return ans

尝试使用python发挥其优势:

def solve():
    n = input()
    l = list(map(int,str(n)))
    l = l[::-1]

    #removing leading zeros
    i = 0
    while l[i] == 0:
        i+=1
    l = l[i:]
    n = ('').join(str(x) for x in l)
    return int(n)

if __name__ == "__main__":
    print (solve())

我已经将int转换为string,然后将string转换为list。我可以很容易地反转列表,然后可以按照相同的过程再次将列表转换为int对象

num=-1534236469
sign=1
if num<0:
    sign=-1
    num=num*-1 # make positive for reverse
list1=list(str(num))
list1.reverse()

numrev=int("".join(str(x) for x in list1))*sign
if numrev.bit_length()>31:
    numrev=0
              
 

与传统的模除法相比,该算法将花费更多的时间。

失败的测试用例是什么?即使测试用例“123”返回这些错误消息。我仍然难以理解LeetCode中的部分,如果不是-231,请查看“说明”选项卡中的标题“注意”。这应该有助于理解这一部分。此外,对于大小写“120”,这将作为字符串反转为“021”,然后int“021”将返回21。@NPP换句话说,您不需要该elif大小写,因为ans=intoneLinerString将去掉前导零。