列出全排列,类似于dfs,用一个递归实现即可,返回值比较麻烦,就简化了用一个全局变量记录了答案,代码如下:
class Solution {
public static boolean v[] = new boolean[100];
public static List<List<Integer>> ans = new ArrayList<>();
public void dfs(int index, int[] nums) {
// 边界条件
if (index >= nums.length) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < nums.length; ++i) {
// 把走过的数加入答案数组
if (v[i]) {
list.add(nums[i]);
}
}
ans.add(list);
return;
}
// 对数组中的每个数字有两种情况,一种访问了这个数字
v[index] = true;
dfs(index + 1, nums);
// 不访问这个数字
v[index] = false;
dfs(index + 1, nums);
}
public List<List<Integer>> subsets(int[] nums) {
ans.clear();
dfs(0, nums);
return ans;
}
}