力扣初級算法刷題之《加一》

題目

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。git

最高位數字存放在數組的首位, 數組中每一個元素只存儲單個數字。算法

你能夠假設除了整數 0 以外,這個整數不會以零開頭。數組

  • 示例 1:
輸入:[1,2,3]
輸出:[1,2,4]
解釋:輸入數組表示數字 123。
  • 示例 2:
輸入:[4,3,2,1]
輸出:[4,3,2,2]
解釋:輸入數組表示數字 4321。
分析:

該題目使用數組來模擬常規整數的加法,即數組最後一位是個位,倒數第二位是十位,倒數第三位是百位以此類推。code

解決思路:
  1. 先要經過算法來獲得一個個位被加一的數組命名爲plus,例如[9,9,9]經過算法處理後獲得[10,0,0]
  2. 實際返回數組命名爲ret其長度length等於plus的長度,若plus[0]等於10則length++
  3. 把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;
    }
}

性感算法渣渣,在線刷題,要加油撒。。。索引

相關文章
相關標籤/搜索