成都网站搭建公司哪家便宜,品牌策划公司怎么样,网站建设基本流程图,dw作业模板免费回溯解法思路#xff1a;
1.跟前面的组合题目有相同的点#xff0c;主要区别在于#xff1a;组合题目是遍历到符合条件的组合时加入li1集合中#xff0c;子集题目是每递归一次就要把结果加入到li1集合中#xff0c;并遍历但nums数组的最后。其他点和组合问题一样。
clas… 回溯解法思路
1.跟前面的组合题目有相同的点主要区别在于组合题目是遍历到符合条件的组合时加入li1集合中子集题目是每递归一次就要把结果加入到li1集合中并遍历但nums数组的最后。其他点和组合问题一样。
class Solution {//接收所有的子集ListListInteger li1new ArrayList();//单个子集ListInteger li2new ArrayList();public ListListInteger subsets(int[] nums) {//调用回溯函数huisu(nums,0);return li1;}//回溯函数public void huisu(int[] nums,int startIndex){//将每个自己添加到li1函数中注意add()中要用new ArrayList(li2)来添加li2li1.add(new ArrayList(li2));
//终止条件要startIndex来规定遍历的位置等于nums的长度时结束这次循环。if(startIndexnums.length){return ;}//循环遍历全部的子集for(int istartIndex;inums.length;i){//将num的元素添加到li2中li2.add(nums[i]);//递归来嵌套for循环来遍历全部子集huisu(nums,i1);//遍历完一条路后进行回溯操作来寻找另一条路。li2.removeLast();} }
}