前言
Algorithms + Data Structures = Programs.
————Pascal之父 Nicklaus Wirth
算法 + 数据结构 = 程序
坚持刷算法题,变得更强!
(如果对你有帮助的话,可以帮忙点赞一下哦)
题目及解析
解析
看看题目是不是脑子一热觉得这题so easy。不就是加1嘛,我只要把数组最后一个数加一然后返回整个数组不就行了。
此言差矣,那你个位数如果是9嘞?那你是不是十位数还要加1?那如果你十位数还是9,百位数是不是又要加1?层层套娃给你弄晕了。
其实我们要解决此题很简单。
思路:我们分为两种情况,一种是普通数,这种数既可以没有进1,也可以进1。举个栗子:普通数可以是123然后加1,变成123;也可以是169,加一变成167,只要加一后长度不变,你原来是三位数加一还是三位数就行。我们认为是普通数。
另一种特殊情况就可以直接举例子:比如999,加一之后是不是变成1000,原来是三位数,加一之后变成了四位数,这时候我们是不是就要让他的数组长度加1了。注意数组长度加1哦。
然后在普通数里面我们再分两种情况:
①尾数或除头数以外有9的情况,咱们可以直接此位赋值为0,然后让 一个变量 i 继续循环,前一位如果不为9,加1即可。
②没有9就直接加1
解题代码
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i = n-1;i>=0;i--){
if(digits[i]==9){
digits[i] = 0;
} else{
digits[i] += 1;
return digits;
}
}
digits = new int[n+1];
digits[0] =1;
return digits;
}
}