当前位置: 首页 > 知识库问答 >
问题:

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

谭翔
2023-03-14

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

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

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

        elif (check_num[len(check_num)-1] == '0'):
            check_num = check_num[:len(check_num)-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)

        return oneLinerString

def main():
    import sys
    import io
    def readlines():
        for line in io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8'):
            yield line.strip('\n')

    lines = readlines()
    while True:
        try:
            line = next(lines)
            x = int(line);

            ret = Solution().reverse(x)

            out = str(ret);
            print(out)
        except StopIteration:
            break

if __name__ == '__main__':
    main()

对于一个输入的情况,我的程序返回正确的输出。

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)

共有3个答案

欧阳翔
2023-03-14

我已将 int 转换为字符串,然后将字符串转换为列表。我可以很容易地反转列表,然后可以按照相同的过程再次将列表转换为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
              
 

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

郜昊苍
2023-03-14

尝试利用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())
甄佐
2023-03-14

对于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
 类似资料:
  • 下面是SPOJ的一个归档问题。示例测试用例通过了,但我在提交时得到了W/A。我缺少一些测试用例(testCase)。需要帮助来找出我错过了什么案例和/或我做错了什么。 瓢虫艾达正在和她的朋友维尼特玩除数游戏。这个游戏有以下规则。他们之间有一堆石头。移动中的玩家可以选择至少1块,最多σ(N)块石头(其中σ(N)代表N的除数)。显然,N在每次移动后都会发生变化。得不到任何石头(N==0)的人输了。 因

  • 我在试着解7。反向整数在leetcodehttps://leetcode.com/problems/reverse-integer/. 给定一个有符号的32位整数x,返回x并反转其数字。如果反转x导致值超出有符号32位整数范围[-2^31,2^31-1],则返回0。 例1: 我对上述问题的解决方案是 我弄错了4个测试用例。其中之一是: 示例

  • 我正在用真正的ios设备在mac上测试我的应用程序。当我运行脚本时,它会在Eclipse IDE中显示以下错误:, org.openqa.selenium.无法创建新的远程会话。所需的功能=功能[{app=/用户//下载/XXX. ipa, platformVersion=10.2.1, platformName=iOS, deviceName=Mr. x'S iPod Touch, UDID=*

  • 在一条数字线上有n个位于不同位置的信标。第i个信标具有位置Ai和功率电平Bi。当第i个信标被激活时,它摧毁其左侧(坐标递减方向)距离bi(含)内的所有信标。然而,信标本身并没有被摧毁。埼玉县将从右至左一个一个地启动信标。如果一个信标被破坏,它就不能被激活。 埼玉希望Genos在所有现有信标的右边严格地添加一个信标,具有任何位置和任何功率等级,这样尽可能少的信标被破坏。注意,Genos放置的信标意味

  • 我试着在SPOJ上解决一个问题,我们必须简单地找到给定数组a的最长递增子序列的长度。 我用动态规划O(n^2)算法解决了这个问题,这个解决方案被接受了。。以下是被接受的代码: 但是当我试图用第二种方法(LINK)解决它时,:: ,我得到了错误的答案。 这是我的c代码 我不知道为什么我会得到错误的答案。你能帮我找到这个错误吗。或者站点中给出的基于LCS的LIS算法不正确??

  • 当我想运行反应-本机运行-Android命令我看到 失败:构建失败,有一个异常。 > 哪里出错了:配置根项目'reactNativeCliTest'时出现问题。 无法解析配置“:classpath”的所有依赖项。无法下载gradle core。jar(com.android.tools.build:gradle-core:2.2.3)无法获取资源的https://jcenter.bintray.c