給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。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; } }
性感算法渣渣,在線刷題,要加油撒。。。索引