Swift 加一 - LeetCode

题目:加一

描述:
给定一个非负整数组成的非空数组,给整数加一。
可以假设整数不包含任何前导零,除了数字0本身。
最高位数字存放在列表的首位。

语文能力捉急啊,看了半天没看懂。。。然后去找了英文原题(我实在LeetCode中文网做的题),英文描述如下:

[LeetCode] Plus One 

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

好吧,第一句是:给定一个以数字数组表示的非负数,ok,我终于理解题意了😂😂😂,意思是一个数组里面存放的元素可以看成一个非负整数,现在给这个整数去加一。

那我们需要做的是,去判断这个非负整数加一后需不需要进位,那就容易了。从数组末位开始加一,如果最后一位不是整数9那么直接加一返回数组,如果是整数9那就变成整数0。极端情况:所有数字都是整数9,那就都变成整数0了,所以需要在数组头部插入一个整数1。

代码如下:

class Solution {
    func plusOne(_ digits: [Int]) -> [Int] {
        if digits.isEmpty {
            return digits
        }
        
        //这里这样写的原因是,参数digits是let定义的不可变的哦
        var digits = digits
        
        for i in (0..<digits.count).reversed() {
            if digits[i] < 9 {
                digits[i] += 1
                return digits
            }
            digits[i] = 0
        }
        //运行至此说明carray还是等于1,即全是9的情况,需要在首位插入数字1
        digits.insert(1, at: 0)
        return digits
    }
}

百度了一下,找到另一种解法,求余然后,设置一个标志位判断是否进位
代码如下:

class Solution {
    func plusOne(_ digits: [Int]) -> [Int] {
        if digits.isEmpty {
            return digits
        }
        //这里这样写的原因是,参数digits是let定义的不可变的哦
        var digits = digits
        
        var carray = 1
        for i in (0..<digits.count).reversed() {
            let sum = digits[i] + carray
            //如果进位即sum = 10,digits[i] = 0
            digits[i] = sum % 10
            carray = sum / 10
            //如果进位 carray = 1,不进位则为零,那么循环结束
            if carray == 0 { return digits }
        }

        //运行至此说明carray还是等于1,即全是9的情况,需要在首位插入数字1
        digits.insert(1, at: 0)
        return digits
    }
}
用Swift开始学习算法中,在LeetCode中开始做初级算法这一章节,将做的题目在此做个笔记吧。

参考文章:

    原文作者:韦弦Zhy
    原文地址: https://www.jianshu.com/p/39e5645ff715
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞