Plus One

Plus One

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为resDigits
  2. 按照n-1, n-2, ..., 0这样的顺序读取数组的值,首先将第n-1个数和1相加值为sum
  3. 如果有进位(也即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;
    }
}

posted @ 2015-08-26 14:10  TinaYo  阅读(186)  评论(0编辑  收藏  举报