自学内容网 自学内容网

力扣代码学习日记六

Problem: 66. 加一

思路

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

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

你可以假设除了整数 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]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

解题方法

对表示数字的数组进行加一操作。如果数组最后一位不是9,则直接加一;如果是9,则需要连续进位。如果所有位都是9,则在数组最前面插入1。

复杂度

时间复杂度:O(n)

这里的 n 是输入数组 digits 的长度。

在最坏的情况下,即数组中的每个元素都是9,我们需要遍历整个数组来将所有的9变成0,并在数组的开头插入一个1。所以时间复杂度是线性的,即 O(n)。

空间复杂度:O(1)

我们没有使用与输入数组长度成比例的额外空间。操作是在输入数组上直接进行的,除了在所有数字都是9且需要在数组前面添加一个新的1的情况下。

在那种特殊情况下,我们创建了一个新的数组,这个数组比输入数组多一个元素,但是这并不影响空间复杂度的常数阶,因此空间复杂度依然是 O(1)。

代码

class Solution(object):
    def plusOne(self, digits):
    
    # 从数组末尾开始向前遍历
        for i in range(len(digits) - 1, -1 ,-1):
            if digits[i] < 9:
                digits[i] += 1 # 如果该位小于9,直接加1后返回数组
                return digits
            digits [i] = 0  # 如果该位等于9,置为0并继续循环
            
        # 如果所有位都是9,需要在数组最前面插入1
        return[1] + digits
class Solution(object):
    def plusOne(self, digits):
        for i in range(len(digits)-1,-1,-1):
            if digits[i] !=9:
                digits[i] +=1
                return digits
            else:
                digits[i] = 0
        digits.insert(0,1)
        return digits

原文地址:https://blog.csdn.net/weixin_49064458/article/details/136239248

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!