假设我们有一组数字;我们必须生成该集合的所有可能子集。这也称为功率设定。因此,如果集合类似于[1,2,3],则幂集将为[[],[1],[2],[3],[1,2],[1,3],[2 ,3],[1,2,3]]
让我们看看步骤-
我们将使用递归方法解决此问题。因此,如果递归方法名称称为solve()
,并且采用数字(数字),临时集合(临时),res和索引的集合
该solve()
方法将如下所示工作-
如果index = nums的长度,则创建一个与temp相同的列表,并插入res并返回
temp [index]:= 0
solve(nums,temp,res,index + 1)
temp [index]:= 1
solve(nums,temp,res,index + 1)
主要功能如下所示-
res:=空列表
创建大小与数字相同的临时列表,并用0填充
调用solve(nums,temp,res,0)
main_res:=一个空列表
对于temp_res中的所有列表
如果lists [i] = 1,则将nums [i]插入到temp
temp:=空列表
对于我:= 0到列表的长度
将temp插入main_res
返回主要资源
让我们看下面的实现以更好地理解-
class Solution(object): def subsets(self, nums): temp_result = [] self.subsets_util(nums,[0 for i in range(len(nums))],temp_result,0) main_result = [] for lists in temp_result: temp = [] for i in range(len(lists)): if lists[i] == 1: temp.append(nums[i]) main_result.append(temp) return main_result def subsets_util(self,nums,temp,result,index): if index == len(nums): result.append([i for i in temp]) #print(temp) return temp[index] = 0 self.subsets_util(nums,temp,result,index+1) temp[index] = 1 self.subsets_util(nums, temp, result,index + 1) ob1 = Solution()print(ob1.subsets([1,2,3,4]))
[1,2,3,4]
输出结果
[[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [1, 4], [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4]]