LeetCode刷題實戰66:加一

算法的重要性,我就很少說了吧,想去大廠,就必需要通過基礎知識和業務邏輯面試+算法面試。因此,爲了提升你們的算法能力,這個號後續天天帶你們作一道算法題,題目就從LeetCode上面選 !git

今天和你們聊的問題叫作 加一,咱們先來看題面:面試

https://leetcode-cn.com/problems/plus-one/算法

Given a non-empty array of digits representing a non-negative integer, increment one to the integer.數組

 

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.ide

 

You may assume the integer does not contain any leading zero, except the number 0 itself.code

題意

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。最高位數字存放在數組的首位, 數組中每一個元素只存儲單個數字。你能夠假設除了整數 0 以外,這個整數不會以零開頭。

例題

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。element

解題

解法的關鍵在於弄明白什麼狀況下會產生進位。使用個位、十位、百位進行列舉:個位:想讓個位+1進位,那麼個位必須爲99+1 = 0carry = 1十位:想讓十位+1進位,那麼十位必須爲9,想要產生進位carry,那麼必須由個位進位而來。想讓個位進位,個位必須爲9.99 + 1 = 00carry = 1百位:想讓百位+1進位,那麼百位必須爲9,想要產生進位carry,那麼必須由十位進位而來,想讓十位進位,那麼十位必須爲9,想要產生進位,個位必須爲9。999 + 1 = 000carry = 1根據以上能夠推論得出兩種狀況:最高位進位若最高位進位,那麼比他低的位數字都爲9,且加1後都爲0,須要初始化一個長度爲(lenght+1)的新數組,0位置爲1表明進位。最高位不進位若最高位不進位,那麼不須要產生新數組,後續數字由更低位計算而來。咱們來看下代碼

 

class Solution {
    public int[] plusOne(int[] digits) {
 int carry = 1;

    for (int i = digits.length - 1; i >= 0; i--) {
        if (carry == 0) {
            return digits;
        }
        int tmp = digits[i] + carry;
        carry = tmp / 10;
        digits[i] = tmp % 10;
    }

    if (carry != 0) {
        int[] result = new int[digits.length + 1];
        result[0] = 1;
        return result;
    }

    return digits;
    }
}leetcode

好了,今天的文章就到這裏。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相關文章
相關標籤/搜索