java 深度优先搜索(回溯法)求集合的幂集
答案:2 悬赏:50
解决时间 2021-03-22 15:37
- 提问者网友:陪我到最后
- 2021-03-22 09:31
如题,用java写一个方法用于求一个集合的幂集,怎么写代码呢?希望可以给出注释,谢谢。
最佳答案
- 二级知识专家网友:星痕之殇
- 2021-03-22 09:54
import java.util.ArrayList;
import java.util.List;
public class BackTrack {
public static void main(String[] args) {
//初始化一个集合,放在list里面
List list=new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("f");
List li=new ArrayList();
PowerSet(0,list,li);
}
//回溯法求幂集
public static void PowerSet(int i,List list,List li){
if(i>list.size()-1){System.out.println(li);}
else{
li.add(list.get(i));//左加
PowerSet(i+1,list,li); //递归方法
li.remove(list.get(i)); //右去
PowerSet(i+1, list, li);
}
}
}
注:该方法采用中序遍历二叉树(实际这棵树是不存在的)。对于第一个元素,左节点加进去,右节点去掉。对于第i一个节点,左加,右去。直到i大于元素的总个数。
输出结果:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 2]
[1, 3, 4]
[1, 3]
[1, 4]
[1]
[2, 3, 4]
[2, 3]
[2, 4]
[2]
[3, 4]
[3]
[4]
[]
import java.util.List;
public class BackTrack {
public static void main(String[] args) {
//初始化一个集合,放在list里面
List
list.add("1");
list.add("2");
list.add("3");
list.add("f");
List
PowerSet(0,list,li);
}
//回溯法求幂集
public static void PowerSet(int i,List
if(i>list.size()-1){System.out.println(li);}
else{
li.add(list.get(i));//左加
PowerSet(i+1,list,li); //递归方法
li.remove(list.get(i)); //右去
PowerSet(i+1, list, li);
}
}
}
注:该方法采用中序遍历二叉树(实际这棵树是不存在的)。对于第一个元素,左节点加进去,右节点去掉。对于第i一个节点,左加,右去。直到i大于元素的总个数。
输出结果:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 2]
[1, 3, 4]
[1, 3]
[1, 4]
[1]
[2, 3, 4]
[2, 3]
[2, 4]
[2]
[3, 4]
[3]
[4]
[]
全部回答
- 1楼网友:不傲怎称霸
- 2021-03-22 10:15
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯