题目
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
- 示例 1:
输入:[1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
- 示例 2:
输入:[4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
分析:
该题目使用数组来模拟常规整数的加法,即数组最后一位是个位,倒数第二位是十位,倒数第三位是百位以此类推。
解决思路:
- 先要通过算法来得到一个个位被加一的数组命名为plus,例如[9,9,9]通过算法处理后得到[10,0,0]
- 实际返回数组命名为ret其长度length等于plus的长度,若plus[0]等于10则length++
- 把plus复制到返回结果ret中,若plus[0]=10则从第三位开始赋值,并使ret[0]=1,ret[1]=0
处理个位加1的算法
这里我使用递归来处理:从最后一位开始加1,若结果=10则使当前索引对应的值=0,递归处理并使索引-1,直到加1的结果<10或索引到达0
public int[] Plus(int[] digits,int index,int plusValue){
int value = digits[index] + plusValue;
if(value == 10 && index > 0){
digits[index] = 0;
return Plus(digits,index - 1,1);
}
digits[index] = value;
return digits;
}
整体代码
public class Solution {
public int[] PlusOne(int[] digits) {
int[] plus = Plus(digits, digits.Length - 1, 1);
int length = plus.Length;
int index = 0;
if (plus[0] == 10)
{
length++;
index = 2;
}
int[] ret = new int[length];
if (plus[0] == 10)
{
ret[0] = 1;
ret[1] = 0;
}
for (int i = index; i < plus.Length; i++)
{
ret[i] = plus[i];
}
return ret;
}
public int[] Plus(int[] digits,int index,int mulity){
int value = digits[index] + mulity;
if(value == 10 && index >0){
digits[index] = 0;
return Plus(digits,index - 1,1);
}
digits[index] = value;
return digits;
}
}
性感算法渣渣,在线刷题,要加油撒。。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。