其他分享
首页 > 其他分享> > leetcode66---数组加一

leetcode66---数组加一

作者:互联网

leetcode66—数组加一:

关键字:数组,字符串转换

题目:

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

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

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

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

示例 3:
输入:digits = [0]
输出:[1]

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/


方法 :

1.数组操作

末尾元素进行加1操作,不进位一般情况直接计算即可,考虑进位的特殊情况。

  1. 部分进位的情况,对进位的部分序列进行操作,当不再出现进位即可退出,返回结果。
  2. 数组全部发生进位,因为是加1操作,所以最多结果是10,进位后该位置元素为0。当所有位置发生进位时,所有位置元素都会为0,数组长度会加1,且增加的第一位元素为1。比如[9,9,9]类型的全为9元素的数组会全部进位,此时只需生成一个长度为4,第一位为1,其余位为0的数组即可满足条件。即[1,0,0,0]。

代码如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        for i in range(n-1, -1, -1):
            k = digits[i] + 1
            if k >= 10:
                digits[i] = k-10
            else:
                digits[i] = k
                return digits
        digits = [0]*(n+1)
        digits[0] = 1
        return digits

复杂度分析:


2.字符串转换:

将数组中数组转为字符串进行拼接,再转换为整数进行加1运算后,再转换为列表。
代码如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        result = int(''.join([str(num) for num in digits]))+1
        return [int(j) for j in str(result)]

str()转换为字符串元素,通过join函数进行拼接,int()整数化后,再str()回字符串,用列表生成式生成列表存储。

复杂度分析:


总结

这道题第一种方法很巧妙,利用了这个进位运算的小规律,处理非常简洁。
第二种方法转换为字符串进行操作也是一种思路。

标签:digits,加一,leetcode66,int,复杂度,元素,---,数组,进位
来源: https://blog.csdn.net/weixin_40794404/article/details/116406581