ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode66---数组加一

2021-05-04 23:32:27  阅读:147  来源: 互联网

标签:digits 加一 leetcode66 int 复杂度 元素 --- 数组 进位


leetcode66—数组加一:

关键字:数组,字符串转换

题目:

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:
输入:digits = [0]
输出:[1]

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/


方法 :

1.数组操作

末尾元素进行加1操作,不进位一般情况直接计算即可,考虑进位的特殊情况。

  1. 部分进位的情况,对进位的部分序列进行操作,当不再出现进位即可退出,返回结果。
  2. 数组全部发生进位,因为是加1操作,所以最多结果是10,进位后该位置元素为0。当所有位置发生进位时,所有位置元素都会为0,数组长度会加1,且增加的第一位元素为1。比如[9,9,9]类型的全为9元素的数组会全部进位,此时只需生成一个长度为4,第一位为1,其余位为0的数组即可满足条件。即[1,0,0,0]。

代码如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        for i in range(n-1, -1, -1):
            k = digits[i] + 1
            if k >= 10:
                digits[i] = k-10
            else:
                digits[i] = k
                return digits
        digits = [0]*(n+1)
        digits[0] = 1
        return digits

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),数组进位情况未知,当遍历所有元素时为n。
  • 空间复杂度: O ( 1 ) O(1) O(1),无额外空间,覆盖原有数组。

2.字符串转换:

将数组中数组转为字符串进行拼接,再转换为整数进行加1运算后,再转换为列表。
代码如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        result = int(''.join([str(num) for num in digits]))+1
        return [int(j) for j in str(result)]

str()转换为字符串元素,通过join函数进行拼接,int()整数化后,再str()回字符串,用列表生成式生成列表存储。

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),遍历所有元素进行操作。
  • 空间复杂度: O ( n ) O(n) O(n),新生成了一个列表,占用额外空间。

总结

这道题第一种方法很巧妙,利用了这个进位运算的小规律,处理非常简洁。
第二种方法转换为字符串进行操作也是一种思路。

标签:digits,加一,leetcode66,int,复杂度,元素,---,数组,进位
来源: https://blog.csdn.net/weixin_40794404/article/details/116406581

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有