Python 子集
假设我们有一组数字;我们需要生成该集合的所有可能的子集。这也被称为幂集。因此,如果集合像 [1,2,3],则幂集将是 [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]
让我们看看步骤 -
- 我们将使用递归方法来解决这个问题。因此,如果递归方法名称称为 solve(),并且它接受数字集 (nums)、临时集 (temp)、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 := 一个空列表
- 创建一个与 nums 大小相同的 temp 列表,并将其填充为 0
- 调用 solve(nums, temp, res, 0)
- main_res := 一个空列表
- 对于 temp_res 中的所有列表
- temp := 空列表
- 对于 i := 0 到列表的长度
- 如果 lists[i] = 1,则将 nums[i] 插入 temp
- 将 temp 插入 main_res
- 返回 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]]
广告