Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Subscribe to see which companies asked this question
两种方法,一个是位操作,一个是回溯。
class Solution(object):
def backtrack(self,nums,temp,start,t_len,res):
if len(temp) == t_len:
t = temp[:]#不这么写,它添加的东西会不对
res.append(t)
#print res,' ',t
else:
for i in range(start,len(nums)):#最开始这个写成了t_len,错
#print t_len,i,temp
temp.append(nums[i])
self.backtrack(nums,temp,i+1,t_len,res)
temp.pop(-1)
def subsets(self, nums):
l = len(nums)
res = []
nums.sort()
for i in range(0,l+1):
temp = []
#print '-----------'
self.backtrack(nums,temp,0,i,res)
return res
'''
l = len(nums)
n = 1 << l
res = []
for i in range(0,n):
j = 0
temp = []
while i > 0:
if i & 1 :
temp.append( nums[j])
i >>= 1
j += 1
temp.sort()
res.append(temp)
return res