题目:
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解题思路:new一个新数组arrnew,比原数组长度+1(因为加一之后位数最多多一位,如99+1)。然后先把第一个空着,把原数组里面的数字,全部复制到arrnew[1]到arrnew[n]上,顺便最后一位+1。判断:最后一位有没有超过十;没超过就直接把原数组最后一位+1返回。否则开始处理进位:从后往前遍历,判断是否大于9,是的话取余,并且前一个+1。处理完进位后看第一个空着的有没有用到(是否为0)。如果不为0,就完成了,直接返回。如果为0,就吧arrnew的后面n位再复制回原数组返回。
代码:(java)
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
int[] arr = new int[n + 1];
int i = 0;
//把原数组复制过来,给arr留第一个位置
for (i = 0; i < n; i++) {
arr[i+1] = digits[i];
}
//第n个复制同时++
arr[i] = ++digits[i-1];
//如果第n个大于9,用arr数组,
if (arr[i] > 9) {
//处理1到length-1的进位,空的第一个留给进位
for (int j = arr.length - 1; j > 0 ; j--) {
if (arr[j] > 9) {
arr[j] %= 10;
arr[j-1] += 1;
}
}
//如果第一个是0,表示没有进到这一位
if (arr[0] == 0) {
//全部前移一个位
int[] x = new int[n];
for (int j = 0; j < x.length; j++) {
x[j] = arr[j+1];
}
return x;
}
return arr;
}
//如果n小于9,返回数组+1
else {
return digits;
}
}
}