一、题目原型:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
二、题目意思剖析:
1 | 示例 1: |
三、解题思路:
误区:我一开始的想法是把数字+1,然后再分。
但是题目的数字并没有限制,所以,当去取余数然后*10的多少次方时,就越界了崩溃了。所以,这题不能这么做。
######正解:递归,只能通过递归来算。
其实我们考虑该题的核心,应该集中于一点:1
2
31.在这里我们先要将最后一位先判断,是否+1后=10。如果=10,就需要进一位,再去判断接下来的情况;如果<10,那就直接返回原数组了。
2.至于除了最后一位的情况,其实也是和前面一样判断。
3.问题核心:```iscarry:是否需要进位,也就是前一位+1后是否等于10
1 | // 递归 iscarry:是否进位,也就是他前一个数是不是等于10 |
1 | func plusOne(_ digits: [Int]) -> [Int] { |
四、小结
耗时16
毫秒,超过77.09%
的提交记录,总提交数109
。