给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
分三种情况,分别讨论。
1、首先就是,如果数组最后一位是小于9的,则只需将数组最后一位加1就可以直接输出了。
2、其次就是,当数组的最后一位是9时,当加1之后就会变成10,所以我们可以对整个遍历,从后往前遍历,只要加1等于10,则将该位置赋值为0,并将前一位加1,一直循环到第0位,如果第0位不等于10,则直接输出当前数组,否则就是第三种情况。
3、最后判断如果数组下标0位置的值是10,则我们需要对数组进行扩容,创建一个新数组,让数组的下标0的值为1,下标1的值为0,其它下标的值则和原先的数组值一摸一样,然后将新数组输出。
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
digits[n-1] = digits[n-1] + 1; //直接将最后一位加1
if(digits[n-1]<10) //最后一位不需要进位,就可以直接输出
return digits;
//如果需要进位,则从后往前遍历
for(int i = n-1;i>=1;i--){ //第一位单独判断
if(digits[i] == 10){ //遇到要进位的,就先置0,前一位加1
digits[i] = 0;
digits[i-1] = digits[i-1] + 1;
}
}
if(digits[0] == 10){ //第一位如果要进位,需要重新new一个容量多1的数组存放
int[] newdigits = new int[n+1];
newdigits[0] = 1;
newdigits[1] = 0;
for(int i = n;i >= 2;i--){ //将原数组的值赋给新数组,除了原第一位
newdigits[i] = digits[i-1];
}
return newdigits;
}
return digits;
}
}
其余已整理的题目链接:
【LeetCode刷题】 题目汇总 -java_Eric加油学!的博客-CSDN博客