[每日一题] 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
        }
    }
}
展示评论