題目:加一 給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。 最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 變數註釋: 思路: 這一題主要是處理 加一 後所可能引發的進位操作 //只有carry > 0時,才 ...
題目:加一
給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。
最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
public int[] plusOne(int[] digits) { int carry = 1; carry //進位數,初始化為1(加一) int i = digits.length - 1; //最高位數字存放在數組的首位,所以從後往前遍歷 while (i >= 0 && carry > 0) { int sum = digits[i] + carry; carry = sum / 10; digits[i] = sum % 10; -- i; } if (carry > 0) { int[] newArray = new int[digits.length + 1]; System.arraycopy(digits, 0, newArray, 1, digits.length); newArray[0] = carry; return newArray; } return digits; }
變數註釋:
思路:
這一題主要是處理 加一 後所可能引發的進位操作
//只有carry > 0時,才需要進行進位操作,迴圈的條件:i >= 0 && carry > 0
//while 執行進位操作,保存下一個carry值,(digits[i] + carry)/10
//經過上面的操作後,基本搞定,但是還有一種情況沒有考慮進去
//最高位也進位,例如999,加一後應該是1000,執行了上面的操作後,digits={0,0,0}
//我們需要重新new int[digits.length + 1],將digits數組複製過去,往最高位填入carry,也就是0的位置
//進位的條件依然是carry > 0
//System.arraycopy(digits, 0, newArray, 1, digits.length);
//這個是jdk提供的拷貝數組的函數,將digits數組(從0開始)拷貝digits.length個元素到newArray數組(從1開始)