LeetCode每日一题,66

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数0之外,这个整数不会以零开头。
思路:
首先判断各位加上1后是否大于9,若大于,则标记有进位,在计算高位时将进位加上,计算到结束后,对结果进位进行判断,若有进位,则还需要扩充一位最高位。

#!/user/bin/env python
# !-*-coding:utf-8 -*-
# !Time :2018/9/25 4:03 PM
# !Author : hyCong
# !@File  : .py
###给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数0之外,这个整数不会以零开头。
def plusOne(digits):
    length = len(digits)
    p = 1 #需要加的数
    j = length - 1 #工作指针
    plus = 0 #是否进位
    while j >= 0: #从个位开始循环
        if (digits[j] + p + plus) >= 10: #判断每一位在加上进位(各位还要加上1)之后是否超过9,若超过,则标记有进位,在下一次计算时加上进位
            plus = 1 #标记有进位
            digits[j] = 0 #因为此题加的是1,因此进位后,此为只会为0
        else: #若不超过,则计算完成,修改当前计算位,将进位置位0
            digits[j] += p + plus
            plus = 0
            break
        p = 0 #因为我们只需要在最后一位加上1,因此在想高位计算时,需要将p置为0
        j -= 1
    if plus == 1: #判断计算完后,是否最高位仍然存在进位,若存则,则需要给数组多加一位
        re = [plus] + digits
        return re
    return digits


s = [8, 9, 9]
print(plusOne(s))

猜你喜欢

转载自blog.csdn.net/c630565685/article/details/82841187