LeetCode之加一-Swift

525 阅读1分钟

问题描述

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 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

结语

语言是招式,算法是内功。希望我们勤练内功,早日成就自己的江湖!