题解 | #集合的所有子集(二)#
集合的所有子集(二)
https://www.nowcoder.com/practice/a3dfd4bc8ae74fad9bc65d5ced7ae813
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型二维数组 */ ArrayList<ArrayList<Integer>> allList = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); public ArrayList<ArrayList<Integer>> subsets (int[] nums) { // write code here Arrays.sort(nums); dfs(0, nums); // 按规定排序 Collections.sort(allList, new Comparator<ArrayList<Integer>>(){ @Override public int compare(ArrayList<Integer> l1, ArrayList<Integer> l2){ int len = Math.min(l1.size(),l2.size()); for(int i=0;i<len;i++){ if(l1.get(i) != l2.get(i)){ return l1.get(i) - l2.get(i); } } return l1.size() - l2.size(); } }); return allList; } public void dfs(int index, int[] nums) { if (index == nums.length) { allList.add(new ArrayList<>(list)); return; } list.add(nums[index]); dfs(index+1, nums); // 回溯 list.remove(list.size() - 1); // 去掉重复 while (index < nums.length - 1 && nums[index] == nums[index + 1]) { index++; } dfs(index + 1, nums); } }