题目来源: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;
}