//dfs 主要思路建立一个表示是否已经访问过的数组 ;
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> resultList = new ArrayList<>();
if(nums == null || nums.length == 0) return resultList;
List<Integer> result = new ArrayList<Integer>();
boolean[] visited = new boolean[nums.length];
helper(nums, visited, resultList, result);
return resultList;
}
private void helper(int[] nums,
boolean[] visited,
List<List<Integer>> resultList,
List<Integer> result) {
if(result.size() == nums.length) {
resultList.add(new ArrayList<>(result));
return;
}
for(int i = 0; i < nums.length; i++) {
if(visited[i] == true) {
continue;
}
result.add(nums[i]);
visited[i] = true;
helper(nums, visited, resultList, result);
visited[i] = false;
result.remove(result.size() - 1);
}
}
}
/*
//dfs 思路是 建立一个list 每次把东西拿出去做递归 但是不知道为什么输出是空 等以后在研究
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<Integer> num = new ArrayList<Integer>();
List<List<Integer>> resultList = new ArrayList<>();
if(nums == null || nums.length == 0) return resultList;
for(int i = 0; i < nums.length; i++) {
num.add(nums[i]);
}
List<Integer> result = new ArrayList<Integer>();
helper(num, resultList, result);
return resultList;
}
private void helper(List<Integer> num, List<List<Integer>> resultList, List<Integer> result) {
if(num == null) {
resultList.add(new ArrayList<>(result));
return;
}
for(int i = 0; i < num.size(); i++) {
result.add(num.get(i));
int n = num.get(i);
num.remove(i);
helper(num, resultList, result);
num.add(i, n);
result.remove(result.size() - 1);
}
}
}
*/
Permutations
最新推荐文章于 2019-02-27 07:26:13 发布