leetcode_66. 加一
目录:
加一
题目
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
从最后一位做加法 要考虑为9加一进位的问题,以及最后超过数组长度的情况(9999)
- 0~8: 直接+1,然后break出循环
- 9:置0,继续往前
注意最后还要判断首位是否为0
解答
func plusOne(digits []int) []int {
for i := len(digits)-1; i >= 0; i-- {
if digits[i] != 9 {
digits[i]++
break
}
digits[i] = 0
}
if digits[0] == 0 {
digits = append([]int{1}, digits...)
}
return digits
}
// 执行用时 :0 ms, 在所有 Go 提交中击败了100.00%的用户
// 内存消耗 :3.3 MB, 在所有 Go 提交中击败了97.77%的用户
收获
对于循环条件,每次进行len()
操作,是否会拖慢计算:不存在, 长度len
是slice
本身的一个属性,获取其值就是访问变量,没必要再创建一个变量才存储这个值(针对本题的场景)
// slice的底层结构体设计
type slice struct {
array unsafe.Pointer
len int
cap int
}