https://leetcode.com/PRoblems/plus-one/
算法描述Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list.
這個題目需要注意的地方是假設數組的長度是n,那么一個數的最高有效位是數組的第0個數,數組的最低有效位是數組的第n-1個數。1) new一個ArrayList為resDigits2) 按照n-1, n-2, ..., 0這樣的順序讀取數組的值,首先將第n-1個數和1相加值為sum3) 如果有進位(也即sum == 10),那么resDigits就加個0元素,接著原數組余下元素,即第n-2, n-3, ..., 0位的數值跳到步驟2)繼續執行;如果沒有進位,那么resDigits就加上sum,并且數組的余下元素也加到resDigits中4) 因為得到的resDigits的第0個數是最低有效位,因此按照題目的要求,把resDigits倒過來。
程序代碼public class Solution { public int[] plusOne(int[] digits) { int length = digits.length; if (digits == null || length == 0) { return null; } List<Integer> resDigits = new ArrayList<Integer>(); int n = digits.length - 1; Boolean flag = true; do { if (flag) { int sum = digits[n--] + 1; if (sum == 10) { resDigits.add(0); flag = true; } else { resDigits.add(sum); flag = false; } } else { resDigits.add(digits[n--]); } }while(n >= 0); if (flag) { resDigits.add(1); } int[] newDigits = new int[resDigits.size()]; for (int i = resDigits.size() - 1; i >= 0; i--) { newDigits[newDigits.length - 1 - i] = resDigits.get(i); } return newDigits; }}新聞熱點
疑難解答