问题描述
给定一个由整数组成的非空数组所表示的非负整数, 在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外, 这个整数不会以零开头.
示例
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123.
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321.
答案
每个元素的和若为 10, 则向前进一位, 若数组中 index=0 的元素为 0, 则说明最高位进位 1, 在数组头部 insert 一个元素 1(例如: 数组 [9,9,9], 则进位成 [1,0,0,0])
代码如下:
- func plusOne(_ digits: [Int]) -> [Int] {
- var result = digits
- var carry = 1
- for idx in result.indices {
- let newIdx = digits.count - 1 - idx
- let sum = digits[newIdx] + carry
- if sum == 10 {
- carry = 1
- result[newIdx] = 0
- } else {
- carry = 0
- result[newIdx] = sum
- }
- }
- if result.first == 0 {
- result.insert(1, at: 0)
- }
- return result
- }
nums = [2,3,4,3,2] 的执行结果如下:
第一次循环:
0 ^ 2 = 2
二进制: 0 + 10 = 10
第二次循环:
2 ^ 3 = 1
二进制: 10 + 11 = 1
第三次循环:
1 ^ 4 = 5
二进制: 1 + 100 = 101
第四次循环:
5 ^ 3 = 6
二进制: 101 + 11 = 110
第五次循环:
6 ^ 2 = 4
二进制: 110 + 10 = 100
结语
语言是招式, 算法是内功. 希望我们勤练内功, 早日成就自己的江湖!
来源: https://juejin.im/post/5c3d497ef265da61616ee99f