1. 程式人生 > >【LeetCode】加一

【LeetCode】加一

文章目錄

題目

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

示例

示例1

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

示例2

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

簡析

  • 用了直接的方法,直接模擬加法,有個特殊點就是考慮最高為進1,陣列的長度增加1。
  • 提交後發現了網友一個更簡潔的方法,只需要判斷當前位是否是9,如果不是直接+1返回,否則當前位置0,下一位接著這個判斷,下一位的+1相當於加前一位的進位。至於特殊情況,發生時,除了最高位其他都是0,所以也不必拿原陣列複製,直接把下標為0的位子置1即可。

程式碼

public static int[] plusOne(int[] digits) {
//解法1
        boolean flag = false;
        for (int i = digits.length - 1; i >= 0; i--){
            int temp = digits[i] + 1;
            digits[i] = temp % 10;
            if (i == 0 && temp / 10 > 0){
                flag = true;
            }
if (temp / 10 == 0) { break; } } if (flag){ int[] result = new int[digits.length+1]; for (int i = 0; i < digits.length; i++) { result[i+1] = digits[i]; } result[0] = 1; return
result; } return digits; }
public int[] plusOne(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[] newdigits = new int[n+1];
        newdigits[0] = 1;
        return newdigits;
    }