给定一个非负整数组成的非空数组,给整数加一。
可以假设整数不包含任何前导零,除了数字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
}
}参考文章: