题目描述:
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
解题思路:
这个没什么好说的了,最开始的时候想着把数组转化成整型数再去进行运算,然后发现测试用例的数根本就是超过整型数的最大范围了,包括long类型的也超了,所以只能按部就班的手写一个加法运算啦。
思路这样的:
第一步:
首先判断这个数是不是9999这样的数,如果是的话就返回10000这种数,这个时候结果数组的长度比原先都大1的。
第二歩:
除了上面这种情况,返回数组的长度是和原数组一样的从后向前依次运算呗,设置一个进位标志位,最后一位的值等于当前值加1,前面每一个位的值等于当前值加上进位值加上当前值。
代码实现(Java语言):
class Solution {
public int[] plusOne(int[] digits) {
boolean judgeAllNight = true;
int len = digits.length;
for(int i=0;i<len;i++){
if(digits[i] != 9){
judgeAllNight = false;
break;
}
}
if(judgeAllNight){
int[] res = new int[len + 1];
res[0] = 1;
return res;
}else{
int carry = 0;
digits[len - 1]++;
for(int i = len - 1; i >= 0; i--){
digits[i] += carry;
if(digits[i] == 10){
digits[i] = 0;
carry = 1;
}else{
break;
}
}
return digits;
}
}
}