前言
个人网站
公众号: 北京程序猿, 网站 : https://yaml.vip
算法题
题干
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
Java代码
public int[] plusOne(int[] digits) {
if (digits == null || digits.length <= 0) {
return digits;
}
final int LEN = digits.length;
int digit = 1;
for (int i = LEN - 1; i >= 0; i--) {
int bitSum = digits[i] + digit;
digits[i] = bitSum % 10;
digit = bitSum / 10;
if (digit == 0) {
break;
}
}
if (digit == 0) {
return digits;
}
int[] data = new int[LEN + 1];
System.arraycopy(digits, 0, data, 1, LEN);
data[0] = digit;
return data;
}
代码解析
- 第6行digit赋值为1, 因为要加1
- 第11-13行代码, 如果过程中digit为0表示没有进位, 可直接返回
- 最后3-4行代码表示digit进位不为0的情况下需将进位放在第一位
反问
- 这道算法题第一次提交就能通过么?
本文著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请于文首标明作者姓名,保持文章完整性,并附上出处和文章链接!未按规范转载者,作者保留追究相应责任的权利!
作者:北京程序猿
链接:加一