leetcode 66.加一 python。

问题描述

LeetCode 66题“加一”要求给定一个由非负整数组成的非空数组,表示一个非负整数,其中每个元素对应整数的一位,最高位位于数组的最左侧。任务是将该整数加一,并返回结果数组。

示例:

  • 输入 [1,2,3],输出 [1,2,4](表示整数123加一后为124)。
  • 输入 [9,9,9],输出 [1,0,0,0](表示999加一后为1000,涉及进位问题)。

解决思路

方法一:直接模拟进位

从数组的最后一位开始逐位处理加一操作,并处理进位问题。如果所有位均为9,则需要在数组最前面插入一个1。

步骤:

  1. 从数组末尾开始遍历。
  2. 对当前位加一,若结果小于10,直接返回数组。
  3. 若结果为10,将当前位设为0,并继续处理前一位。
  4. 若遍历完所有位仍有进位,则在数组开头插入1。

代码示例:

def plusOne(digits):
    n = len(digits)
    for i in range(n - 1, -1, -1):
        if digits[i] < 9:
            digits[i] += 1
            return digits
        digits[i] = 0
    return [1] + digits

时间复杂度分析: 最坏情况下需要遍历整个数组(如[9,9,9]),时间复杂度为O(n),空间复杂度为O(1)(原地修改)。


方法二:转换为整数后处理

将数组转换为整数,加一后再转换回数组。此方法简洁但可能受限于语言对大整数的支持(Python无需考虑此问题)。

步骤:

  1. 将数组转换为整数。
  2. 整数加一。
  3. 将结果转换

问题描述

LeetCode 66题“加一”要求给定一个由非负整数组成的非空数组,表示一个非负整数,其中每个元素对应整数的一位,最高位位于数组的最左侧。任务是将该整数加一,并返回结果数组。

示例:

  • 输入 [1,2,3],输出 [1,2,4](表示整数123加一后为124)。
  • 输入 [9,9,9],输出 [1,0,0,0](表示999加一后为1000,涉及进位问题)。

解决思路

方法一:直接模拟进位

从数组的最后一位开始逐位处理加一操作,并处理进位问题。如果所有位均为9,则需要在数组最前面插入一个1。

步骤:

  1. 从数组末尾开始遍历。
  2. 对当前位加一,若结果小于10,直接返回数组。
  3. 若结果为10,将当前位设为0,并继续处理前一位。
  4. 若遍历完所有位仍有进位,则在数组开头插入1。

代码示例:

def plusOne(digits):
    n = len(digits)
    for i in range(n - 1, -1, -1):
        if digits[i] < 9:
            digits[i] += 1
            return digits
        digits[i] = 0
    return [1] + digits

时间复杂度分析: 最坏情况下需要遍历整个数组(如[9,9,9]),时间复杂度为O(n),空间复杂度为O(1)(原地修改)。


方法二:转换为整数后处理

将数组转换为整数,加一后再转换回数组。此方法简洁但可能受限于语言对大整数的支持(Python无需考虑此问题)。

步骤:

  1. 将数组转换为整数。
  2. 整数加一。
  3. 将结果转换
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值