public class Solution {
public List<List<Integer>> permute(int[] num) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
boolean[] visited = new boolean[num.length];
DFS(num, path, result, visited);
return result;
}
private void DFS(int[] num, List<Integer> path, List<List<Integer>> result, boolean[] visited){
if(path.size() == num.length){
result.add(new ArrayList<>(path));
return;
}
for(int i=0; i<num.length; i++)
{
if(!visited[i]){
visited[i]=true;
path.add(num[i]);
DFS(num, path, result, visited);
path.remove(path.size()-1);
visited[i]=false;
}
}
}
}
分析:[1,2,3] 这个是参考别人的思路。大概思路如下:用一个数组来记录访问的数据,
1)从最左边开始扫描,一一加入path。如果path满了,入库。
2)一一回退,改变状态