加一
题目描述
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
思路
首先判断加一以后数字的位数会变得情况,也就是9,99,999,…等情况的时候,这种情况好处理,直接将数组的长度加一,第一个元素为1,其他为0即可。第二种情况是需要进位的,首先将数组的最后一个元素加一,然后从后往前遍历,大于等于10,当前数字-10,前一个数字+1,以此类推。
代码:
class Solution {
public int[] plusOne(int[] digits) {
//判断是否为9,99的类型数组的标志位
boolean isAllNine = true;
for(int i = 0;i < digits.length; ++i){
if(digits[i] != 9){
isAllNine = false;
break;
}
}
if(!isAllNine){
digits[digits.length - 1] += 1;
for(int i = digits.length - 1; i >= 0 ; --i){
if(digits[i] > 9){
digits[i] = 0;
digits[i-1] += 1;
}
}
}else{
int [] newDigits = new int[digits.length + 1];
newDigits[0] = 1;
digits = newDigits;
}
return digits;
}
}