加一
Please remain simple
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数。 你可以假设除了整数 0 之外,这个整数不会以零开头。
Example
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
我的
func plusOne(_ digits: [Int]) -> [Int] { var realdigits = digits var i = realdigits.count-1 if i < 0{ return [] } if realdigits[i] != 9 { realdigits[i]+=1 }else{ while realdigits[i] >= 9 { realdigits[i] = 0 if i==0 { realdigits.insert(1, at: 0) break } i-=1 if realdigits[i] == 8 { realdigits[i]+=1 break } realdigits[i]+=1 } } return realdigits }
简直是Debug型编程啊真是糟糕透了,性能也一般,50%吧。
网上找了几个思路都和我都差不多,性能也一模一样。
4 ms
func plusOne(_ digits: [Int]) -> [Int] { if digits.count < 0 { return [] } var newDigits = digits for i in stride(from: digits.count - 1, through: 0, by: -1) { if newDigits[i] < 9 { newDigits[i] += 1 return newDigits } newDigits[i] = 0 } newDigits.insert(1, at:0) return newDigits } }
这个为啥这么快??和它应该一样思路的只有它的1/3,难道
和
for i in stride(from: digits.count - 1, through: 0, by: -1) {
这么不一样吗?.reversed