leetcode-66. 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.

題意解析:

這題就是給你一個數字,讓你加一,只不過數字是用數組形式給的,數組每個元素儲存一位,下標越小位越高。

很簡單,我第一個想到的就是正常做法。設置一個進位,只有一種特殊情況需要考慮,就是全是9的情況,這樣加一會導致數組大小要+1,分開考慮就行,代碼如下:

public class Solution {
    public int[] plusOne(int[] digits) {
        int carry = 0;
        for(int i = 0, j = digits.length - 1; i <= digits.length / 2; i++, j--){
            if(digits[i] == 9 && digits[j] == 9){
                carry = 1;
            }else{
                carry = 0;
                break;
            }
        }
        if(carry == 1){
            int[] result = new int[digits.length + 1];
            result[0] = 1;
            return result;
        }
        digits[digits.length - 1]++;
        for(int i = digits.length - 1; i >= 0; i--){
            digits[i] += carry;
            if(digits[i] == 10){
                digits[i] = 0;
                carry = 1;
            }else{
                carry = 0;
            }
        }
        return digits;
    }
}


可以看見時間已經是最快的了。如果你不想像我這樣一開始就考慮特殊情況,你也可以這麼做:

public class Solution {
    public int[] plusOne(int[] digits) {
        int carry = 1;
        for(int i = digits.length - 1; i >= 0 && carry != 0; --i){
            digits[i] += carry;
            carry = digits[i] / 10;
            digits[i] = digits[i] % 10;
        }
        if(carry == 0)
            return digits;
        int[] result = new int[digits.length + 1];
        result[0] = 1;
        for(int i = 0; i < digits.length; ++i){
            result[i + 1] = digits[i];
        }
        return result;
    }
}
算到最後有進位就新建一個數組。

速度慢了一點呢。其實差不多的。和測試數據的分佈有關。



發佈了32 篇原創文章 · 獲贊 52 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章