Leetcode 66.加一
描述:给定一个非负整数数组,数组每一位对应整数的一位数字。
要求:计算整数加 11 后的结果。
说明:
1≤digits.length≤100
0 ≤ digits[i] ≤ 9
示例:
示例1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。示例2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。思路
这是数组模拟加1运算的题目。直观地,指针从数字最后一位开始,数值+1,会有2种可能:
结果不为10,直接结束,不需要进位。直接返回原数组digits。
结果为10,指针指向倒数第2位,数值+1。此时,也会有2种可能:
结果不为10,直接结束,不需要进位。直接返回原数组digits。
结果为10,指针指向倒数第3位,数值+1。继续有2种可能...
上诉过程就是一个迭代的过程。当然也需要考虑特殊情况:999类型(所有数字都是9)。999+1=1000,不能返回原数组(计算结果4位 > 原数组3位)。所以需要新建1个result数组(长度为原数组长度+1,即4位),result数组首位为1,其余位为0。
除此之外,这里有1个技巧,就是使用取模10来完成数字转换:
如果+1后结果(结果取值范围是 [1, 10] )为10的话,则该位数字应为0。
如果+1后结果是1~9,则该位数字应是原数本身。
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1 ; i >= 0 ; i--) {
digits[i]++;
//取模10。如果+1结果为10,该位数字为0。
digits[i] %= 10;
if (digits[i] != 0){
return digits;
}
}
// 仍然未返回原数组,说明是999类型
int[] result = new int[digits.length + 1];
result[0] = 1;
return result;
}
评论区