题目如下:
给出的输出示例如下:
分析思路:
如题,这道题最值得注意的就在于各个位上是9的情况。
1.各个位数上没有9的情况,如1、2、3,直接加一返回1、2、4即可。
2.假设若干个位数上有9的情况,比如1、9、9,我们则需要从末尾开始找到第一个不为9的数,即1,将其加一,后面其余各位置为0即可。
3.各个位数上都为9,比如9、9、9、9,我们需要重新构造一个长度为原来数组长度+1的数组,将新数组第一个元素置为1,后面置为0即可。
代码如下:
class Solution {
public int[] plusOne(int[] digits) {
for(int i=digits.length-1;i>=0;i--){ //采用反向遍历
digits[i]++; //加一
digits[i]=digits[i]%10; //求加一后数组末尾的最后一个数字大小
if(digits[i]!=0){ //判断最后一个数字是否加一为0,即原来为9
return digits;
}
}
digits=new int[digits.length+1]; //构造一个长度为digits.length+1的数组
digits[0]=1;
return digits;
}
}
时间复杂度:O(n),其中 n 是数组 digits 的长度。
空间复杂度:O(1)。返回值不计入空间复杂度。
要是对大家有所帮助的话,可以小小的点个赞哦~