golang_算法: leetcode_数组07-加一

本文详细探讨了如何使用Golang解决LeetCode中的数组问题——加一。通过对数组元素进行遍历和处理,实现了在不创建新数组的情况下将数组中的数字加一。文章深入讲解了算法思路和代码实现,适合Golang初学者和算法爱好者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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))
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值