胖子崔某人 2020-04-28 10:07 采纳率: 0%
浏览 108

Leetcode数组题 “加一”奇怪的逻辑错误?(Python)

先放题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

我的思路是将输入数组变成int变量,对变量+1后再映射成数组。

映射时用map()函数会相对简单,并且能够实现。但起初我对map()函数不熟悉的时候自己写了一个将int映射成list的函数,出现了问题。

先上代码:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        length = len(digits)
        figure = 1
        for digit in digits:
            length -= 1
            figure += digit * (10**length)

        result = self.f(figure)
       # result = list(map(int,str(figure)))

        return result


    def f(self,number: int) -> List[int]:
        a = int(number / 10); #商
        b = [int(number % 10)]; #余数
        if a == 0 : return b
        else : 
            L = self.f(a)
            L.extend(b)
            return L

对于大多数的测试用例都能通过,直到遇到这一条:

输入:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]

输出:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,6,6,2,4]

预期:
[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]

通过实验,发现错误与位数有关。

我的输入
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

我的答案
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2]

预期答案
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2]

如上例子中,直到手动把1累加到18位,才会出现答案与预期不一致的问题。

原本猜测,是python整型变量的大小范围问题。经过查阅资料和实验,排除了该种可能性,因为其一,python的整型变量没有大小限制,其次,通过map()函数成功通过了测试,说明上述代码中figure这个变量是准确的。

本人才疏学浅,没能解决这个问题,希望各位大佬慷慨相授!谢谢!

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-26 16:00
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何添加系统级别的屏幕边框
  • ¥100 图像处理,如何优化使得清晰
  • ¥15 请求看看这个仿真电路哪里有问题?
  • ¥100 关于python拓展屏使用pyautogui.screenshot无法截图的问题
  • ¥15 有偿求答 无导出权限怎么快速导出企业微信微文档
  • ¥15 求解答,怎么数码管中这么加入闹钟或者传感器,这应该怎么加入相应的代码
  • ¥15 scottplot5
  • ¥30 想问问这个建模怎么编程没有思路
  • ¥15 关于imageENview(ImageEN)中新建图层并根据鼠标位置添加图标
  • ¥100 用两台电脑局域联网进行MT5的EA参数优化,但是连接不上,日志提示: