01
题目分析
第66题:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
根据题目,我们需要加一!没错,加一很重要。因为它只是加一,所以我们会考虑到两种情况:
1、普通情况,除9之外的数字加1。
2、特殊情况,9加1。(因为9加1需要进位)
所以我们只需要模拟这两种运算,就可以顺利进行求解!
02
题目图解
假设我们的数为[1,9,9]
大概是下面这样:(这个图解...真的有点太简单了...)
当然,这里我们需要考虑一种特殊情况,就是类似99,或者999,我们需要进行拼接数组。具体如下图:
如上图所示,我们最后只需要将其转换成代码即可!
03
Go语言示例
func plusOne(digits []int) []int {
for i:=len(digits)-1; i>=0; i-- {
if digits[i] < 9 { // 当前位置不用进位,+1,然后直接返回
digits[i]++
return digits
} else { // 要进位,当前位置置0
digits[i] = 0
}
}
return append([]int{1}, digits...)
}
提示:
append(a,b...) 的含义是:将b切片中的元素追加到a中。
注:本系列所有教程中都不会用到复杂的语言特性,大家不需要担心没有学过go。算法思想最重要,使用go纯属本人爱好。同时,本系列所有代码均在leetcode上进行过测试运行,保证其严谨性!