[每日一题] 66. 加一
链接:Leetcode
难度等级:Easy
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
思路:本题题意还是比较好理解。直观的想,如果最后一位数字不是9,直接最后一位数字加1即可。需要考虑的是一些特殊情况,即末尾包含多个连续的9需要持续向前进位。最极端的情况是所有位置上都是9,则需要返回一个比原来数组长1的数组,首位为1,其他位置为0。
ps:我的解法是在力扣用户inuter的解法基础上调整了下。他的解法使用了取模操作,比较耗时。
class Solution {
fun plusOne(digits: IntArray): IntArray {
val size = digits.size
for (pos in size - 1 downTo 0) {
val curNum = digits.get(pos) + 1
if (curNum == 10) {
digits.set(pos,0)
} else {
digits.set(pos, curNum)
return digits
}
}
// 所有位都为9
return IntArray(size + 1) { i ->
if (i == 0) 1 else 0
}
}
}