【LeetCode】66. 加一

116 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 题目给出一组非负整数组成的整数数组
    • 题目要求模拟对整数进行+1
    • 对整数进行加一,主要分为两种情况
    • 当整数不为9时,则对整数加一,则不用进位
    • 当整数为9时,则对整数加一,则变为0,然后进位为1

二、思路分析:

我们拿到本题,对整数进行加一,按照之前我们学习整数相加,则思路很清晰了:

  • 首先定义指针从数组尾部进行逆向遍历,定义一个carry
  • 当数字为9,则将其赋值为0,carry赋值为1
  • 当数字不为9,则将其进行加一,carry赋值为0
  • 当遍历完整个数组时,carry还未,则需要在最高位添加1

image.png

image.png

image.png

根据以上思路,我们使用python来实现代码如下:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        carry = 1

        index = len(digits)-1

        while index >= 0 :

            if digits[index] != 9:

                digits[index] = digits[index] + carry
                carry = 0
            
            else:
                if carry == 1:
                    
                    digits[index] = 0
                    carry = 1

            index = index -1

        if carry == 1: digits = [1] + digits

        return digits
        

我们换成纯数学的角度进行思考,加法计算时每逢十就进位,其所在未就为0

改造上述的代码,直接使用数学方法也可以实现,代码如下:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """

        index = len(digits)-1

        while index >= 0 :

            digits[index] = digits[index] + 1

            if digits[index] % 10 != 0:

                return digits
            
            else:

                digits[index] = 0
            
            index = index - 1

                
        return [1]+digits
        

查看大佬们解法,还可以根据Python的特性来解决,只要需要一行代码就可以解决。

在下,非常佩服。

让我们来学习一下,大佬的代码吧

return list(map(int,str(int(''.join(map(str,digits)))+1)))

四、总结:

我们提交本期,结果如下:

image.png

时间复杂度为O(n),空间复杂度为O(1)

以上是本期内容,欢迎大佬们点赞,下期见~~