力扣加一

力扣加一

要求

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

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

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

示例 1:

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

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

思路1

1.将digit的数组转为字符串
2.然后再将字符串转为 int 加1
3.再将字符串转为数组就完毕了

代码片

  s="".join(str(x) for x in digits)
        int1=int(s)
        s1=int1+1
        s2=str(s1)
        s=[]
        for i in range(len(s2)):
            s.append(int(s2[i]))
        return s
        # t=[int(s2[i]) for i in  range(len(s2))] //这里的代码是可以的,只是效率不如上面的
        # return t

思路二

思路一的升级版,代码更加精简效率更高

class Solution:
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        r=''
        for i in digits:
             r+=str(i)
        num=str(int(r)+1)
        d=[]
        for j in range(len(num)):
             d.append(int(num[j]))
        return d

思路三

1.判断最后一位的数字是否小于9,小于9,就直接再最后一位加1,然后把这个数组拼接起来就行了
2.如果最后一位不小于9的(就是9了)然后循环倒数n-2 到-1的位置(n=len(nums))又去判断是否大于9,不大于直接就是 把前面的数组再拼接一个[0]就可以了,如果大于9那就把后面再拼接一个[0] 数组(现在就2个0 了即[0,0])
例如 [1,9,9] 现在不满足条件1 所以申明一个数组res=[0] 和然后for循环前面的 判断前一个是不是 也是大于9 大于9 然后 res=[0,0]了 再循环一次 发现就到了位置0 digits[0]=1 ,发现 返回结果为digits[:i]+[digits[i]+1] + res 即为[] +[2]+[0,0]

class Solution:
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        n = len(digits)
        if digits[-1] < 9:
            return digits[:-1] + [digits[-1]+1]
        res = [0]
        for i in range(n-2,-1,-1):
             if digits[i] < 9:
                 return digits[:i]+[digits[i]+1] + res
             else:
                 res.append(0)
        if digits[0] == 9:
             return [1] + res
        else:
             return res

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/86513906