1. 程式人生 > 其它 >LeetCode-066-加一

LeetCode-066-加一

加一

題目描述:給定一個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一。

最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/plus-one/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:遍歷陣列

初始化一個進位的值addOne為1,從陣列digits的最後一位往前開始遍歷:

  • 把當前位置的值和addOne相加;
  • 如果相加結果為10,則產生進位,addOne
    設定為1,並且當前為值的值設定為0;
  • 如果相加結果小於10,則不會產生進位,addOne設定為0,並且當前為值的值設定為相加結果;
  • 直到遍歷結束。

遍歷結束後,如果addOne為0,則直接返回digits;如果addOne為1,則把1放在digits的第一位,然後返回。

import java.util.Arrays;

public class LeetCode_066 {
    public static int[] plusOne(int[] digits) {
        int addOne = 1;
        for (int i = digits.length - 1; i >= 0; i--) {
            if (addOne + digits[i] == 10) {
                addOne = 1;
                digits[i] = 0;
            } else {
                digits[i] = addOne + digits[i];
                addOne = 0;
            }
        }
        if (addOne == 1) {
            int[] result = new int[digits.length + 1];
            result[0] = addOne;
            for (int i = 0; i < digits.length; i++) {
                result[i + 1] = digits[i];
            }
            return result;
        } else {
            return digits;
        }
    }

    public static void main(String[] args) {
        int[] digits = new int[]{4, 3, 2, 1};
        Arrays.stream(plusOne(digits)).forEach(digit -> {
            System.out.print(digit + " ");
        });
    }
}

【每日寄語】 清晨,帶著一顆雀躍的心醒來,感謝又一個充滿愛的日子。