给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。git
最高位数字存放在数组的首位, 数组中每一个元素只存储单个数字。算法
你能够假设除了整数 0 以外,这个整数不会以零开头。数组
输入:[1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。
输入:[4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。
该题目使用数组来模拟常规整数的加法,即数组最后一位是个位,倒数第二位是十位,倒数第三位是百位以此类推。code
这里我使用递归来处理:从最后一位开始加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; } }
性感算法渣渣,在线刷题,要加油撒。。。索引