建立网站要准备多少钱,互联网营销师培训教材,兰州最好的网站建设公司哪家好,制作企业网站的一般流程在日常开发或算法面试中#xff0c;经常会遇到 “数字加一” 的场景 —— 但这里的数字并非简单的整数#xff0c;而是用数组表示的#xff08;例如 [1,2,3] 代表 123#xff09;。这种场景看似简单#xff0c;却暗藏边界陷阱#xff0c;今天我们就来彻底拆解这个问题经常会遇到 “数字加一” 的场景 —— 但这里的数字并非简单的整数而是用数组表示的例如 [1,2,3] 代表 123。这种场景看似简单却暗藏边界陷阱今天我们就来彻底拆解这个问题从思路到代码一步步搞定。一、问题描述题目要求给定一个非负整数以数组 digits 的形式呈现数组中每个元素是单个数字且不包含前导 0对其执行 “加一” 操作返回加一后的数组结果。示例说明输入输出说明[1,2,3][1,2,4]123 1 124[9,9,9][1,0,0,0]999 1 1000数组扩容[1,9,9][2,0,0]199 1 200进位传递[0][1]0 1 1单个元素边界二、核心思路分析1. 为什么从后向前遍历加一操作的本质是 “从最低位开始计算”而数组的最后一个元素恰好对应数字的最低位例如 [1,2,3] 中 3 是个位。因此从数组末尾向前遍历是最符合直觉的选择。2. 进位处理的关键逻辑若当前位数字 不是 9直接加 1此时无后续进位直接返回结果因为低位已处理完毕。若当前位数字 是 9加 1 后会变成 0且需要向高位进位因此继续向前遍历处理下一位。3. 全 9 场景的边界处理如果遍历完所有元素都没有返回说明数组中所有数字都是 9此时需要创建一个新数组首位为 1后面拼接原数组原数组已全部变为 0例如 [9,9,9] → [1] [0,0,0] [1,0,0,0]。三、Python 完整代码实现含注释py取消自动换行复制四、代码深度解析1. 遍历逻辑拆解py取消自动换行复制len(digits)-1数组最后一个元素的索引最低位。-1遍历终止条件不包含 -1即遍历到索引 0。-1步长为 -1实现从后向前遍历。2. 进位处理细节以 [1,9,9] 为例遍历索引 2数字 9置为 0继续向前。遍历索引 1数字 9置为 0继续向前。遍历索引 0数字 1加 1 变为 2返回 [2,0,0]。3. 全 9 场景的巧妙处理当数组全为 9 时循环结束后 digits 已变为 [0,0,...,0]此时 [1] digits 直接生成首位为 1、后续为 0 的新数组无需额外判断。五、复杂度分析场景时间复杂度空间复杂度说明普通场景非全 9O(n)O(1)原地修改数组无额外空间全 9 场景O(n)O(n1)新建长度为 n1 的数组时间复杂度最坏情况下需遍历整个数组如全 9 场景因此为 O (n)n 为数组长度。空间复杂度普通场景下原地修改空间复杂度为 O (1)全 9 场景需新建数组空间复杂度为 O (n)。六、扩展延伸面试高频变种1. 变种问题数组实现 “加 k”k 为任意正整数原问题是 “加 1”如果改为 “加 k”例如 [1,2,3] 45 → [1,6,8]该如何修改思路进位初始值设为 k而非 1。遍历数组时当前位 (原数字 进位) % 10新进位 (原数字 进位) // 10。遍历结束后若进位 0将进位拆分为单个数字拼接到数组前面。代码实现pyth取消自动换行复制def plus_k(digits, k):carry k # 进位初始值为 kfor i in range(len(digits)-1, -1, -1):total digits[i] carrydigits[i] total % 10 # 当前位结果carry total // 10 # 新进位if carry 0: # 无进位时直接返回return digits# 处理剩余进位如 carry123 → [1,2,3]while carry 0:digits.insert(0, carry % 10)carry carry // 10return digits# 测试[1,2,3] 45 → [1,6,8]print(plus_k([1,2,3], 45)) # 输出 [1,6,8]# 测试[9,9] 3 → [1,0,2]print(plus_k([9,9], 3)) # 输出 [1,0,2]2. 变种问题处理负数数组表示负数加一如果数组表示负数例如 [-1,9,9] 代表 -199加一操作后应为 -198数组 [-1,9,8]该如何处理思路负数加一本质是 “减 1”注意借位逻辑与加一相反。从末尾向前遍历遇到非 0 的数字减 1返回结果。遇到 0变为 9继续向前处理借位。若所有位都是 0如 [-1,0,0]则变为 [-0,9,9] → 简化为 [-9,9]但需注意前导 0 处理。七、总结数组加一问题的核心是 “进位处理” 和 “边界场景覆盖”遍历方向从后向前符合数字计算逻辑。核心逻辑非 9 直接加 1 返回9 则置 0 进位。边界处理全 9 场景需数组扩容。