题目来源:https://leetcode-cn.com/problems/plus-one/
大致题意:
给定一个整数数组,每个元素由 0-9 组成,首位不为 0,也就是说这个数组可以看成一个整数。
如 [9, 9, 9],可以看成 999。
求出对这个数组看成的整数 +1 后的结果,结果还以整数形式返回。
如 [9, 9, 9],可以看成 999,+1 后为 1000,数组为 [1. 0. 0. 0]
思路
- 初始时,设置进位为 1,也就是最低位 +1,从尾向头开始遍历数组
- 让当前位加上进位,若等于 10,那么当前位再置 0,进位为 1
- 每次遍历到一个位置时,先判断进位是否为 0,若为 0 直接退出循环。否则执行第二步
- 最后根据首位是否为 0,也就是首位是否有向更高位的进位,选择如何处理结果数组
public int[] plusOne(int[] digits) {
int carry = 1;
for (int i = digits.length - 1; i >= 0; i--) {
// 没有向当前位的进位,计算结束
if (carry == 0) {
break;
}
// 当前位加上进位
digits[i] += carry;
// 如果加上进位后等于 10,需要将当前位置 0,并且向高位进位
if (digits[i] == 10) {
digits[i] = 0;
carry = 1;
} else {
carry = 0;
}
}
int[] ans;
int n = digits.length;
// 若首位为 0,那么一定有向更高位的进位,数组增加一位,且首位为 1,其他位为 0
if (digits[0] == 0) {
ans = new int[n + 1];
ans[0] = 1;
} else { // 否则,数组与计算后的原数组一致
ans = digits;
}
return ans;
}
该博客介绍了一道LeetCode上的编程题目,即如何实现一个整数数组(模拟整数)加一的功能。算法从数组末尾开始遍历,逐位进行加一操作,遇到10则向前一位进位,直到没有进位发生。最终,根据首位是否为0判断是否需要增加额外的高位1。这是一个涉及数组操作和进位逻辑的典型问题。
260

被折叠的 条评论
为什么被折叠?



