给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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
class Solution {
/**
* @author zhang
* 第一次的思路:
* 题没读仔细,本以为这个题很简单,但是提交后发现只通过了92/111
* 看到出错的那个用例我明白了,如果加1后需要进位,那么数组的长度会加1,拿用例来说,[9] --> [1,0]
* 所以就不单单是数组末位+1的问题了
* 第二次:
* 因为他给的数组长度1 <= digits.length <= 100,所以直接相加就不可取了
* 根据第一次通过了92个用例,所以只有一小部分用例是特殊的,那么特殊的就在于9,+1后就变成了10
* 用for循环来判断数组中从后往前连续的9,这样才会使它们全部都+1
* 然后如果全是9的话,把数组的长度+1,然后digits[0]==1,其余全是0
*/
public int[] plusOne(int[] digits) {
if (digits == null) {
return null;
}
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] != 9) {
digits[i]++;
return digits;
} else {
digits[i] = 0;
}
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
}
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
版权属于:张子
本文链接:https://www.znzzi.com/articles/154
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。