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中开始做初级算法这一章节,将做的题目在此做个笔记吧。

参考文章:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

浅谈Go语言中闭包的使用

闭包(Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由...

4598
来自专栏Pythonista

golang之指针

接受者变量代表的值实际上是源值的复制品。如果这个值不是指针类型,在值方法中就没有途径去改变源值。

1083
来自专栏liulun

Nim教程【九】

向关注这个系列的朋友们,道一声:久违了! 它并没有被我阉掉,他一定会得善终的,请各位不要灰心 Set集合类型 为了在特殊场景下提高程序的性能设置了Set类型,...

21110
来自专栏前端黑板报

JS正则表达式入门篇

兰翠 就职于爱屋吉屋,出身后端现混迹于前端 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或...

2259
来自专栏陈树义

如何检测链表中是存在循环

  链表在面试中出现的频率很高,有的比较正常,考链表的常规操作,主要看基本功是否扎实,有些就比较难,难在思维的改变和是否能够想到对应的点。这里出现的是其中一个题...

3485
来自专栏用户2442861的专栏

python strip()函数

http://www.cnblogs.com/kaituorensheng/archive/2013/05/23/3096028.html

1292
来自专栏大闲人柴毛毛

剑指offer——面试题9计算斐波纳切第n个数

/** * 计算斐波纳切数列的第n个值 * @author chibozhou * */ public class Fibonacci { /** ...

3797
来自专栏每日一篇技术文章

Swift3.0 - 数据类型

// 插入操作 shoppingList.insert("Maple Syrup", at: 0)

821
来自专栏向治洪

Java泛型和通配符那点事

泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数...

2315
来自专栏Golang语言社区

举例讲解Go语言中函数的闭包使用

和变量的声明不同,Go语言不能在函数里声明另外一个函数。所以在Go的源文件里,函数声明都是出现在最外层的。 “声明”就是把一种类型的变量和一个名字联系起来。 G...

3285

扫码关注云+社区

领取腾讯云代金券