【数组基本】Leetcode 66 整数加1

Leetcode 66. 整数加一 这道题用一个数组来表示整数,digits[0] ~ digits[ length - 1 ] 依次表示整数的 最高位 至 最低位。例如,digits = [1, 2, 3] 表示整数 123。现在要把这个整数加 1,返回相加结果的数组表示。

问题分析

按照我们平时做加法的习惯,整数加 1 时,1 是与最低位的数字相加。有三种情况:

情况 1. 最低位 + 1 < 10,不需要进位,例如:123 + 1 = 124。这是最简单的情况,只要把最低位加 1 ,返回结果即可。

情况 2. 最低位是 9 ,9 + 1 = 10,就要进位,例如:129 + 1 = 130,199 + 1 = 200。出现进位时,要继续对高一位的数字加 1,直到 某一位 + 1 < 10 (类似于情况1)为止,此时返回结果。

情况 3. 可是如果整数的 最低位 到 最高位 都是 9,加 1 后进位就超出原有位数,怎么办呢?例如:99 + 1 = 100,999 + 1 = 1000。观察发现,这些数字都是 10 的整数倍。这种情况可以用新数组表示结果,长度为原数组加 1,首位(最高位)为 1,其余位为 0。

代码实现

Python 代码及注释如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:        
        digits_length = len(digits)
        
        # 从最低位开始加1
        for i in range(digits_length - 1, -1, -1):
            # 情况1:如果这一位加1后不需要进位,运算结束,返回结果
            if digits[i] < 9:
                digits[i] += 1
                return digits
            
            # 情况2(进位):相加后这一位为0
            # 继续循环到高一位,加1
            digits[i] = 0
            
        # 情况3:最高位也是9,数组长度不够,要用新数组表示
        new_digits = [0] * (digits_length + 1)
        new_digits[0] = 1
        return new_digits

本文对您有帮助的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!

参考:My Simple Java Solution - Plus One - LeetCode

你可能感兴趣的:(Leetcode学习笔记,leetcode,算法,python,数据结构)