给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
思路:
从后往前加,如果最后一个数字变成0,则该位为0,前一位继续加1;否则,前一位加0,也就是都保持不变
需要注意的是,{9}这种情况,加了以后变成10,但按上面的思路,就是{0}
因此需要判断最终的第0个是不是0,如果是0,就新创建 个数组,第一位是1,后面就是原数组
/**
* Created with IntelliJ IDEA.
* Description:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
* User: hhj
* Date: 2018-08-26
* Time: 8:16
*/
public class PlusOne {
public static int[] plusOne(int[] digits) {
int len = digits.length;
int[] res = new int[len];
int plused = 1;
for (int i=len-1; i>=0; i--){
int num = digits[i] + plused;
if (num == 10){
res[i] = 0;
}else {
plused = 0;
res[i] = num;
}
}
if (res[0]==0) {
int[] newarr = new int[res.length+1];
newarr[0] = 1;
for (int i=0; i<res.length-1;i++){
newarr[i+1] = res[i];
}
return newarr;
}
return res;
}
public static void main(String[] args){
int[] arr = {9,9,9};
int[] res = plusOne(arr);
for (int num: res){
System.out.println(num);
}
}
}