在这里插入图片描述
思路

跟46全排列思路相似,唯一不同点就是 列表长度会有改变、下一次遍历从nums的i+1开始

res:存放所有排序

track表示一种排列

j表示列表长度

进行回溯

len(track)==j时,代表找到一种排列,这时候track进行回退,去寻找下一个

如 nums=[1,2,3,4] j = 3 这时候找到一个组合 123 下一个 124 那就是之前的123 去掉3 把4加进来

将track加入res时,需注意用res.append(track[:]),而不是res.append(track) 否则在执行track操作时,加入到res的对应数据也会跟着发生变动

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        def backtrack(nums,j,track):
            if j==len(track):
                res.append(track[:])
                return
            for i in range(len(nums)):
                track.append(nums[i])
                backtrack(nums[i+1:],j,track)
                track.pop()
        for j in range(len(nums)+1):
            backtrack(nums,j,[])
        return res

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部