第7日:加一
题目链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
题目:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
相关标签 数组、数学
解题:
-
分析+1后的数组几种情况
大致思路:
-
【1,2,3,4】+1=【1,2,3,5】
末尾加1直接返回数组。
-
【8,9,9,9】+1=【9,0,0,0】
为9的数变为0,再将8加1,返回数组。
-
【9,9,9,9】+1=【1,0,0,0,0】
数组中全部为9,直接创建一个容量+1的新数组,然后将首下标的值改为1;
详细代码如下:
-
public int[] plusOne(int[] digits) {
int len =digits.length;
//判断最后一位是否为9
if(digits[len-1]!=9){
digits[digits.length-1]+=1;
return digits;
}
for(int i=len-1;i>=0;i--){
if(digits[i]==9){
//将为9的数变为0
digits[i]=0;
}else{
//将第一次不为9的数+1,并返回
digits[i]+=1;
return digits;
}
}
//到这里,说明数组中已经全部是9了
int[] arr=new int[len+1];
arr[0]=1;
return arr;
}