LeeCode每日一题--加一

  【前言】坚持日更LeeCode刷题系列

    不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!


  【题目】66.加一

    题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

    最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

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

    你可以假设数组中无重复元素。


    示例:

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

    思路一:很容易我们可用想到暴力求解的方法,即将列表中的数字转化为原来的数字后加一,再求出结果后的每位数码,并逆序输出即可。具体代码如下:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        sum1 = 0
        for i in range(len(digits)):
            sum1 = sum1*10+digits[i]
        sum1 = sum1+1
        list2 = []
        while sum1>0:
            list2.append(sum1%10)
            sum1 = sum1//10
        return list2[::-1]

    运行结果:
在这里插入图片描述

    思路二:采用递归的思想(操作上采用循环遍历的方式),从末尾数开始判断(digits[i]+1 % 10)如果为0,则上一位产生进位,继续进行相同的判断,直到判断不为0。注意当数字为99,999类型时,需要在列表增加一个新元素1。具体代码如下:

class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        for i in range(len(digits)-1,-1,-1):
            digits[i] = digits[i]+1  #可以想下为什么把digits[i]+1放在此处
            if(digits[i]%10==0):
                digits[i] = 0
            else:
                return digits
        if(digits[0]==0):        #如果首位为0,则证明该数字为99,999类型,因此需要在首位插入一个1
            digits.insert(0,1)
        return digits

    运行结果:
在这里插入图片描述

    关于其中一些知识的链接:

    列表的insert函数
    算法图解


    思路三:利用python中int类型和str类型互化求解。具体代码(参考自LeeCode评论区某前辈)如下:

class Solution:
    def plusOne(self, digits):
        '''
        :type digits: List[int]
        :rtype :List[int] 
        '''
        d = int(''.join([str(i) for i in digits]))+1
        return [int(i) for i in str(d) ]

    运行结果:
在这里插入图片描述

    分享就到这里了,欢迎大家一起交流讨论。


    注明

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/plus-one

发布了32 篇原创文章 · 获赞 62 · 访问量 1314

猜你喜欢

转载自blog.csdn.net/Mingw_/article/details/104730299