思路
跟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
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 78. 子集
发表评论 取消回复