法一:
解题思路:
从尾部开始遍历,
1)如果i为9,把digits[i]置为0,遍历下一个i(先判断是否为9),若为9,同样把digits[i]置为0,继续遍历下去,
若都是9,都只会遍历到else语句,全部变成0。最后else语句会出来返回一个数组{1}和digits数组相连的新数组。
若遍历到中间或后面有一个不为9就会跳到if语句把进位值进行digits++就返回。
2)如果第一个i不为9,直接+1即可返回
func main{
var nums []int
//nums=[]int{9,9,9,9,9,9}
//nums=[]int{9,9,9,9,9,1}
nums=[]int{9,9,9,9,1,9}
ans4:=plusOne(nums)
fmt.Println(ans4)
}
func plusOne(digits []int) []int {
n:=len(digits)
if n==0{
return []int{1}
}
for i:=n-1;i>=0;i--{
if digits[i]!=9{
digits[i]++
//第一轮i=n,i不为9的话,加digits[i]+1就可以直接返回结果了,如12347、99991,返回12348、99992
return digits
}else{
digits[i]=0//第一轮i为9的话,当前i位置为0,如12349,第二轮i不为9跳到if语句,digits++即加上第一轮的进位数就可返回12350了,又如99999,第一轮i为9,当前i位置为0;第二轮i为9,当前i位置为0...最后全部置为0。
}
}
return append([]int{1},digits...)
}
时间复杂度:O(n)
空间复杂度:O(1)