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; }}
新闻热点
疑难解答