一、问题

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

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

示例 2:

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

二、解题思路

    分析:这道简单问题,容易想到的两种思路是:

      1. 将数组中的单个数组合并成为数组表示的数字,再加一,然后将数字重新转换为数组的形式存储,这里可以有两种实现方式,(1) 一种是用将数组中的元素先拼接成字符串,然后转换为整数加一,在转换为字符串,用数组存储,并进行类型转换,也就是本文的第二种实现方式;(2) 另一种实现方式是,直接将数组中的数字,计算成为一个数组表示的数字,然后加一,然后通过整除和取余操作结合的方式,重新用数组的方式存储。这种方式和第一种实现方式较类似,不做练习了;

      2.第二种思路,即直接在原数组上进行操作,这里主要考虑数字是9和进一的操作。具体实现较简单,直接参考下列代码:


三、python具体实现

基于原数组的直接实现:

class Solution(object):
    def plusOne2(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        if digits[-1]<9:
            digits[-1] += 1
            return digits
        
        index = len(digits)-1
        flag = True
        while digits[index]+1>9 :
            digits[index] = 0
            if index ==0:
                digits.insert(0,1)
                flag = False
                break
            index -=1
        if flag:
            digits[index] += 1
        return digits

转换成字符串实现:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        digits = [str(i) for i in digits]
        numStr = str(int("".join(digits))+1)
        
        digits = [int(i) for i in numStr]
        return digits

 


四、题外记

    简单问题不简单,人的思维和计算机的思维!!!

 


版权声明:本文为weixin_42521211原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42521211/article/details/88540864