Leetcode-D49-数组-78. 子集&79. 单词搜索

一、复习

-75、 颜色分类
1、需要注意一下while中的条件应该是i

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        zero = 0
        size = len(nums)
        i = 0
        def swap(nums,index1,index2):
            nums[index1],nums[index2]=nums[index2],nums[index1]
        while(i<size):
            if nums[i]==0:
                swap(nums,i,zero)
                i+=1
                zero+=1
            elif nums[i]==2:
                swap(nums,i,size-1)
                size-=1
            else:
                i+=1
        
        return nums

Leetcode-D49-数组-78. 子集&79. 单词搜索_第1张图片

77、组合

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        nums = [i for i in range(1, n + 1)]
        def com(nums,res,path,k):
            if k>len(nums):
                return
            if k == 0:
                res.append(path)
                return
            else:
                for i in range(len(nums)):
                    com(nums[i+1:],res,path+[nums[i]],k-1)
            
        res = []
        path = []
        com(nums,res,path,k)
        return res
            

1、思路上更加清晰,没有特殊的判断了。
2、递归的参数变化最好都在递归函数上,这样会自动创建新的变量,而不是多个递归函数共享一个变量,造成混乱。比如,如果不把k-1写在函数里,则会造成共用k,导致结果不正确的情况。而写在函数里,则会创建新的变量。

78. 子集

1、用回溯直接通过了,包括剪枝(因为不重复,就是组合)过程。

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        def subset(nums,res,path):
            if len(nums)==0:
                return
            for i in range(len(nums)):
                res.append(path+[nums[i]])
                subset(nums[i+1:],res,path+[nums[i]])
                
        res = [[]]
        path =[]
        subset(nums,res,path)
        return res

Leetcode-D49-数组-78. 子集&79. 单词搜索_第2张图片

三、79. 单词搜索

1、这题感觉不太有思路。
2、确认过眼神,是今天不想写的题

你可能感兴趣的:(python,数据结构-数组,leetcode,算法,职场和发展)