今天我们来看一下子集的问题。
题目描述:给定一个任意集合A,集合的长度为Length,让你打印出这个集合中所包含的所有子集。
题目分析:此问题实际上也是一个遍历树的问题,进行遍历每一个子元素,再进入下层函数时候记录上层结果,加入到下层函数中,再存储起来。其实总结器来他就是一颗完全二叉树。以下我们结合图来具体的说一下:
我们以集合{1,2,3}来对此画树状图理解一下。图如下:
以此我们可以得到集合{1,2,3}中的子集有{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3};
以此我们就可以用递归算法对其进行代码操作。
具体的递归方法:对于一个含有n个元素的集合,我们要对其进行找子集,首先我们需要先定义一个数组,以此来存储对这N位的2进制数来表示这个集合,第i为如果为1则表示第i个元素在表示的这个集合中,否则则不再这个集合中。简单的来说就是首先我们先让这个数组的第一个元素为No,然后他会一直往下找,如果到递归结束时还是No,就将它打印出来,然后进行回溯到上一层。然后我们就把这个元素定位Yes,然后在进行在Yes条件下进行递归寻找,我们每次进行到递归结束的条件时,我们对其进行回溯。可能我说的还是有点理解不了,大家可以结合着上面的图来看代码: