66. Plus One

一、题目

  1、审题

  

  2、分析

    给出一个整数数组,代表一个整数,其中第一个元素为最高位。求该数组代表的数字值加一后形成的新数组。

   

二、解答

  1、思路:

    从后向前遍历数组,且元素值 +1,

      ①、若 +1 后数值 < 10,则直接赋该元素值 +1,返回数组。

      ②、 若 +1 后数值 = 10,代表需要进位,则直接赋该元素值 0,继续遍历且下一个元素值 +1。

        令: 当数组第一个元素也需要进位时,则需创建一个比原数组容量大 1 的新数组。

public int[] plusOne(int[] digits) {
    
        int len = digits.length;

        for (int i = len-1; i >= 0; i--) {
            int sum = digits[i] + 1;
            if(sum != 10) {
                digits[i] = sum;
                return digits;
            }
            else    // digits[i] + 1  == 10
                digits[i] = 0; 
        }
        
        int[] arr = new int[len+1];
        arr[0] = 1;
        for(int i = 1; i <= len; i++)
            arr[i] = digits[i-1]; 
        
        return arr;
    }

  

  优化:

  

public int[] plusOne2(int[] digits) {
        
        int n = digits.length;
        
        for(int i=n-1; i>=0; i--) {
            if(digits[i] < 9) {
                digits[i]++;
                return digits;
            }
            
            digits[i] = 0;
        }
        
        int[] newNumber = new int [n+1];
        newNumber[0] = 1;    // 后边的数值必定全为 0
        
        return newNumber;
    }

 

posted @ 2018-09-21 10:44  skillking2  阅读(126)  评论(0编辑  收藏  举报