Leetcode1数组练习

leetcode 数组练习

  • 66:plus one
    • 代码部分1
    • 代码部分2
  • 31. Next Permutation
    • 题意理解
    • 代码部分

66:plus one

代码部分1

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        l=[1]
        c=0
        if len(digits)==0:
            return digits
        cur=len(digits)-1
        while cur+1:
            if digits[cur]==9:
                d1=digits[cur+1:]
                digits=digits[:cur]
                digits.append(0)
                digits.extend(d1)
                cur-=1
                c=1
            else:
                digits[cur]+=1
                cur=-2
                break
        if cur==0 or cur==-1:
            l.extend(digits)
            digits=l
        return digits

**主要思路:**想法比较简单,当发现cur位置为9时截取长度[:cur]以及[cur+1:],cur位置处置为0

Runtime: 36 ms, faster than 88.65% of Python3
Memory Usage: 12.9 MB, less than 98.54%

代码部分2

        if len(digits) == 0:
            digits = [1]
        elif digits[-1] == 9:
            digits = self.plusOne(digits[:-1])
            digits.extend([0])
        else:
            digits[-1] += 1
        return digits

Runtime: 36 ms, faster than 88.65% of Python3
Memory Usage: 13.2 MB, less than 57.36% of Python3

递归的方式:
优点:代码简洁漂亮
缺点:空间复杂度会稍微大一点点

31. Next Permutation

题意理解

本题目标:输入一个list,求取该list的各个数字的各种排列组合的情况下仅大于本list的下一种组合方式
思路:list从后往前查找当nums[i-1]

代码部分

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        c=1
        for i in range(len(nums)-1,0,-1):
            if nums[i-1] < nums[i]:
                vol=max(nums[i:])
                cur=i
                for j in range(i,len(nums)):
                    if nums[j]>nums[i-1] and nums[j]

Runtime: 36 ms, faster than 97.38% of Python3

Memory Usage: 13.1 MB, less than 78.38%

评价:方法不难,重在理解如何寻找仅大于本轮list的下一轮排列组合方式

你可能感兴趣的:(Leetcode学习过程)