力扣链接:https://leetcode-cn.com/probl...
解题思路:
这道题其实是非常巧妙的一道题,也再次感慨算法真的是非常训练思维的。在处理数组加一的过程中,我们知道十进制是满十进位,所以需要特殊处理的就是9这个数字,那么如何处理呢?有哪些情况呢?

  1. 情况一:数组的最后一位数字不为9,这种情况下直接加1即可
  2. 情况二:最后一位/多位数字为9,这种情况下,从后往前找到第一位不为9的,然后将其加一,从这位从前往后的都置为0,第一种情况可以认为是情况二的特例,后面没有置为0的位数
  3. 情况三:全部为9,起始位置新增一位,其他的位数全部值为零
  4. func plusOne(digits []int) []int {
     n := len(digits)
     for i := n - 1; i >= 0; i-- {
         if digits[i] != 9 {
             digits[i]++
             for j := i + 1; j < n; j++ {
                 digits[j] = 0
             }
             return digits
         }
     }
     newDigits := make([]int, n+1)
     newDigits[0] = 1
     return newDigits
    }

LabRat
1 声望1 粉丝