题目描述
给定一个数组表示非负整数,其高位在数组的前面,对这个整数加1,返回新数组。
我的解法——倒置后相加再倒置
- 先将数组倒置,后面加一个0,然后执行进位操作,然后再倒回来
- n的复杂度。
- 结果:beat 42.78%
class Solution(object):
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
length = len(digits)
for i in range(length/2):
digits[i],digits[length - i - 1] = digits[length - i - 1],digits[i]
digits.append(0)
now = 1 # 当前位需要加的数
i = 0
while(i < length + 1 and now != 0):
last = digits[i]
digits[i] = (now + digits[i]) % 10
if(now + last >= 10):
now = (now + last) / 10
else:
now = 0
i += 1
if(digits[length] == 0):
digits = digits[0:length]
else:
length += 1
for i in range(length/2):
digits[i],digits[length - i - 1] = digits[length - i - 1],digits[i]
return digits
最优解法——直接相加
- 最好的解法!!!
- 直接相加,最后对第一位是否进位进行特判即可
- n的时间复杂度
public int[] plusOne(int[] digits) {
int carry = 1;
for (int i = digits.length-1; i>= 0; i--) {
digits[i] += carry;
if (digits[i] <= 9) // early return
return digits;
digits[i] = 0;
}
int[] ret = new int[digits.length+1];
ret[0] = 1;
return ret;
}