加一
加一
题目链接
题目简介
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。示例 3:
输入:digits = [0]
输出:[1]
题目解法
数组加一操作,在数组末尾加一,有一种情况就是 9这个数字,加一要往前进一,本身变为0,可以用循环判断来操作,直接在末尾加一,取模10,如果变成0的话就说明这个数字是9,余数赋给它本身,继续循环判断,直到取模不为0为止。还有一种特殊情况,比如 9999 加 1 之后就是10000,数组的长度要扩容,9999取模之后都是0,扩容的数组默认值也都是00000,所有,首位直接赋值为1
public static int[] plusOne(int[] digits) {
int len = digits.length - 1;
for(int i = len;i >= 0; i--) {
//最后一位加1
digits[i]++;
//如果最后一位取模不等于0的话,说明前一位不用加1,直接返回
digits[i] = digits[i] % 10;
if(digits[i] != 0) {
return digits;
}
}
// 比如 数组 9999 加一,变成10000,要扩大数组
digits = new int[digits.length + 1];
//原本的数组已经变成 0000了,所有扩大一位后,直接在首位赋值为1即可
digits[0] = 1;
return digits;
}