今天这段代码实现了数组形式的整数加1
虽然是简单题但是学会很有用处。
题目:给定一个表示大整数的整数数组digits,其中digits[i]是整数的第i位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导0。
将大整数加 1,并返回结果的数字数组。
- 遍历起点:从数组最后一位(个位)开始,逐步向前检查。
- 非9的处理:若当前位≠9,直接+1后返回原数组(无需后续操作)。
- 连续9的处理:若当前位=9,将其置为0(模拟进位),继续向前遍历。
- 全9的特殊场景:若遍历完所有位仍未返回(即数组全为9),则新建长度+1的数组,首位设为1(如
[9,9]→[1,0,0])。
2. 获取数组长度
int length = digits.length;- 作用:记录输入数组的长度,避免后续重复调用
digits.length,提升效率。 - 3. 反向遍历数组
while (--length >= 0) {- 作用:从数组**最后一位(个位)开始向前遍历(
--length先减后判断,等价于从length-1开始)。 - 遍历逻辑:依次检查个位→十位→百位…,处理进位问题。
- 作用:检查当前位是否需要进位:
- 若≠9:直接+1即可,无需进位;
- 若=9:需置为0并继续向前进位。
- 逻辑:新建长度+1的数组,首位设为1(其余默认0),返回结果(如
[9,9,9]→[1,0,0,0])。
该代码的结果:
| 输入数组 | 输出结果 | 场景说明 |
|---|---|---|
[1,2,3] | [1,2,4] | 末尾非9,直接加1 |
[1,9,9] | [2,0,0] | 末尾连续9,进位到百位 |
[9,9,9] | [1,0,0,0] | 全9场景,扩容数组并补1 |
- 时间复杂度:O(n)。最坏情况遍历整个数组(如全9场景),n为数组长度。
- 空间复杂度:O(1)(非全9场景,复用原数组)或O(n)(全9场景,需新建数组)。