今天刷算法题有一次刷到了回朔算法的题目 出现频率太高了 有必要记录一下
public class Test {
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> lists = new ArrayList<List<Integer>>();
List<Integer> list = new ArrayList<>();
dfs(lists,list,nums,0);
return lists;
}
public static void dfs(List<List<Integer>> lists,List<Integer> list,int[] nums,int begin){
lists.add(new ArrayList<>(list));
for (int i = begin; i < nums.length; i++) {
list.add(nums[i]);
dfs(lists,list,nums,i+1);
list.remove(list.size()-1);
}
}
public static void main (String[] args) {
int[] nums = {1,2,3};
List<List<Integer>> result = subsets(nums);
System.out.print("[");
for (List<Integer> re : result) {
System.out.print("[");
for (Integer integer : re) {
System.out.print(integer+",");
}
System.out.print("],");
}
System.out.println("]");
}
}
回朔算法的关键在于在使用完条件后 又将原本的数据回溯到使用之前 方便下一次使用
回溯算法是一个类似于枚举的搜索过程
详见简单易懂回溯算法