给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解析:
思路
一个整数加1,无论进不进位,都是从尾部开始加1的。
不进位:末尾加1 < 10,加后直接返回,对应数组末尾元素+1即可
进位:对需要进位的原数组中的位的数修改值为0,当进位位数 < 整数位数,数组相应位置元素+1即可
当这一位等于9的时候+1,即加1后模10为0,说明原位数字为9
进位位数 = 整数位数,例如9,99,999,9999,此时直接变为10,100,1000,10000即可
在遍历中修改------判断是否能遍历到整数的位数,如果能,原数组直接左边插入1个1即可
在结果中修改------直接重新新建一个原数组长度加1长度的新数组,设置首元素为1,其余元素为0,返回新数组即可
import java.util.Arrays;
class Solution66 {
public static void main(String[] args){
int[] digits={9,8,7,6,5,4,3,2,1,0};
System.out.println(Arrays.toString(plusOne(digits)));
}
public static int[] plusOne(int[] digits) {
int carry=1;
for(int i=digits.length-1;i>=0;i--){
int num=digits[i]+carry;
digits[i]=num%10;
carry=num/10;
if(carry==0){
break;
}
}
if(carry==1){ //只能说明数组当中肯定是全9
int[] arr=new int[digits.length+1];
arr[0]=1;
return arr;
}
return digits;
//错误的思路 整形溢出
/*
int num=0;
for(int i=0;i<digits.length;i++){
num=num*10+digits[i];
}
num=num+1;//124
int[] arr=new int[(""+num).length()];
for(int i=arr.length-1;i>=0;i--){
arr[i]=num%10;
num/=10;
}
return arr;
*/
}
}
结果展示: