【算法】大整数数组连续进位

目录

题目描述

思路分析

一般法

秀儿法

代码

一般法

秀儿法


题目描述

本题来源于力扣66.加一

给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。

将大整数加 1,并返回结果的数字数组。

示例1:

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

加 1 后得到 123 + 1 = 124。

因此,结果应该是 1,2,4。

示例2:

输入: digits = 9
输出: 1,0
解释: 输入数组表示数字 9。

加 1 得到了 9 + 1 = 10。

因此,结果应该是 1,0。

思路分析

本题目可以分两种情况来分析

(1)加1后没有产生进位

(2)加1后产生进位

对于(1)就非常简单了,把数组最后一位+1返回就行,下面主要来说(2)

(2)的主要问题是连续进位,即最后一位进位之后,前面如果是9则需要继续进位,下面介绍两种解决方法

一般法

笔者自己做的时候用的是这种方法,主要思路为:

设置一个标识变量carry_flag来表示当前是否有未处理的进位,然后倒着遍历数组

(1)如果当前遍历的元素是9并且carry_flag=1,说明要进位,当前元素改成0,carry_flag不变

(2)如果当前遍历的元素不是9并且carry_flag=1,说明无需进位,把当前元素加1后返回整个数组即可

(3)如果一直没有进到(2),说明数组是全由9构成(如9,9,9),这种情况下返回时在最前面需要添加一个1,即999变成1000

代码见第三节

秀儿法

本来笔者觉得自己的思路还算简洁,但看了题解竟然还有更变态的,这里引用力扣用户灵茶山艾府的题解,出处:66. 加一 - 力扣(LeetCode)

算法:

从右往左找第一个不等于 9 的数,记作 digitsi。

进位,把 digitsi 加一,把下标在 i+1,n−1 中的数全变成 0。

特别地,如果所有数都等于 9,那么答案为 1,0,0,...,0,其中有 n 个 0。

代码

一般法

python 复制代码
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        flag = 1 if digits[len(digits) - 1] == 9 else 0
        if flag == 0:
            digits[len(digits) - 1] += 1
            return digits
        else:
            digits[len(digits) - 1] = 0
            carry_flag = 1
            for i in range(len(digits) - 2, -1, -1):
                if digits[i] == 9 and carry_flag == 1:
                    digits[i] = 0
                elif digits[i] != 9 and carry_flag == 1:
                    digits[i] += 1
                    return digits
            return [1]+digits

秀儿法

python 复制代码
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1  # 进位
                return digits
            digits[i] = 0  # 进位数字的右边数字都变成 0
        # digits 全是 9,加一后变成 100...00
        return [1] + digits
相关推荐
海绵宝宝转agent4 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭4 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT4 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071574 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
hetao17338375 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
卷无止境5 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路6 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师6 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师6 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia6266 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信