You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0’s.
    Increment the large integer by one and return the resulting array of digits.

    給予一個陣列組叫做「digits」,裏面的每個元素都是整數,且陣列中的數值由高到低排序,且起始值不會有0。
    將一個整數加入1,並回傳到「digits」陣列中。
    

    Constraints:
    確認digits中的數字範圍,以及陣列長度,重點是不會出現0開頭。

    1 <= digits.length <= 100
    0 <= digits[i] <= 9
    digits does not contain any leading 0's.
    

    Example 1:

    Input: digits = [1,2,3]
    Output: [1,2,4]
    Incrementing by one gives 123 + 1 = 124.
    

    Example 2:

    Input: digits = [4,3,2,1]
    Output: [4,3,2,2]
    Incrementing by one gives 4321 + 1 = 4322.
    

    Example 3:

    Input: digits = [9]
    Output: [1,0]
    Incrementing by one gives 9 + 1 = 10.
    

    Solution:
    1. 先陣列中的數字取出,由字串轉成數值。
    2. 將數值+1。
    3. 再將數值+1轉成字串陣列。
    (ex.注意當input的陣列大於2^53時,要使用BigInt(value),
    因為JavaScript原生的Number能夠表示的最大值為2^53。)

    Code 1:

    var plusOne = function(digits) {
      if (digits.length > 11) {
        let digitsNum = BigInt(digits.join(''))
        digitsNum++
        digitsString = String(digitsNum)
        return digitsString.split('')
      }
      
      let digitsNum = Number(digits.join(''))
      digitsNum++
      digitsString = String(digitsNum)
      return digitsString.split('')
    };
    

    FlowChart:
    Example 1

    digits = [1,2,3]
    digits.length = 3 < 11 //使用Number()
    Number(digits.join('')) = 123 //先轉字串合併在一起,再轉數值
    Number.(digits)++ = 123 + 1 = 124
    String(digitsNum) = '124'
    return digitsString.split('') = [1,2,4]
    

    FlowChart:
    Example 2

    digits = [4,3,2,1]
    digits.length = 4 < 11 //使用Number()
    Number(digits.join('')) = 4321 //先轉字串合併在一起,再轉數值
    Number.(digits)++ = 123 + 1 = 4322
    String(digitsNum) = '4322'
    return digitsString.split('') = [4,3,2,2]
    

    FlowChart:
    Example 3

    digits = [9]
    digits.length = 1 < 11 //使用Number()
    Number(digits.join('')) = 9 //先轉字串合併在一起,再轉數值
    Number.(digits)++ = 9 + 1 = 10
    String(digitsNum) = '10'
    return digitsString.split('') = [1,0]
    

    Remark: 暴力解 => 直接判斷陣列最後一個數值,不是9就加1,是9就變成0,且使用.unshift(1)在陣列第一位推入1的數值。
    Code 2:

    var plusOne = function(digits) {
      for (let i = digits.length - 1; i >= 0; i--) {
        if (digits[i] !== 9) {
          digits[i]++
          return digits
        } else {
          digits[i] = 0
        }
      }
      digits.unshift(1)
      return digits
    };
    

    Code 3:

    var plusOne = function(digits) {
      return (String(BigInt(digits.join("")) + BigInt(1))).split("")
    };