golang_算法: leetcode_数组07-加一

版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/88069881
package main

import "fmt"

//设计算法:
//99->1,0,0    999->1,0,0,0
//从后往前遍历数组,如果末尾的数字为9,赋值为0,负责++
//如果首端的数字为0,插入[]int{1}至最前端
func plusOne(digits []int) []int {
	n := len(digits)
	for i := n - 1; i >= 0; i--{
		if digits[i] == 9 {
			digits[i] = 0
		} else {
			digits[i]++
			return digits
		}
	}
	fmt.Println(digits)
	if digits[0] == 0 {
		digits = append([]int{1}, digits...)
	}
	fmt.Println(digits)
	return digits
}

//方法2:
//直接对每个索引上的数字进行处理
//如果最后一位为9,9+1后为10,通过10%10=0重新赋值给这个数
//然后进行n-1位数处理,重复上一步骤
func plusOne2(digits []int) []int {
	n := len(digits)
	index := 1
	for i := n - 1; i >= 0; i--{
		sum := digits[i] + index //确定每一位数字的值
		value := sum % 10 //逢10归0,负责保持原数字
		index = sum / 10 //如果大于等于10,则为1;否则为0
		digits[i] = value
	}
	if index == 1 { //说明数组最前端是个10,但是1未放入数组
		digits = append([]int{1},digits...)
	}
	return digits
}
func main() {
	d := []int{9,9}
	fmt.Println(plusOne2(d))
}

猜你喜欢

转载自blog.csdn.net/weixin_43851310/article/details/88069881