Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 题目给出一组非负整数组成的整数数组
- 题目要求模拟对整数进行+1
- 对整数进行加一,主要分为两种情况
- 当整数不为9时,则对整数加一,则不用进位
- 当整数为9时,则对整数加一,则变为0,然后进位为1
二、思路分析:
我们拿到本题,对整数进行加一,按照之前我们学习整数相加,则思路很清晰了:
- 首先定义指针从数组尾部进行逆向遍历,定义一个carry
- 当数字为9,则将其赋值为0,carry赋值为1
- 当数字不为9,则将其进行加一,carry赋值为0
- 当遍历完整个数组时,carry还未,则需要在最高位添加1
根据以上思路,我们使用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)))
四、总结:
我们提交本期,结果如下:
时间复杂度为O(n),空间复杂度为O(1)
以上是本期内容,欢迎大佬们点赞,下期见~~