加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
解题思路:
首先判断最后一位是否是9,若不是就最后一位加一返回。
最后一位若是9吗,则对数组进行从后往前的遍历,找到第一位不是9的数。给这个数加一,其后的数字全部置为0.
倘若全部是9,则建立一个新的数字,长度比原数组大一,把第一位置为1,其后所有的数都为0.
代码如下:
public static int[] plusOne(int[] digits) {
if(digits[digits.length-1]!=9) { //判断最后一位是否为9
digits[digits.length-1]+=1;
return digits;
}
int i=digits.length-1;
while(digits[i]==9 && i>0) { //从后向前遍历数组,找到第一位不是9的数的位子
i--;
}
if(i!=0 || (i==0 && digits[i]!=9)) { //若这个数不是最后一位 则给这个数加一,其后所有的数置为0.
digits[i]+=1;
for(int j=i+1;j<digits.length;j++) {
digits[j]=0;
}
return digits;
}
else { //否则新建数组,第一位为,其后所所有数字都为0.
int [] re = new int [digits.length+1];
for(int j=0;j<re.length;j++) {
if(j==0) {
re[j]=1;
}
else {
re[j]=0;
}
}
return re;
}
}