题目描述
- 老简单了,一眼就是用visited数组记录出现过的数字,依次基础上进行回溯即可
- 和前面的题目很像,用队列结合回溯使用
代码 & 思路
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
boolean[] visited = new boolean[nums.length];
Deque<Integer> deque = new ArrayDeque<>();
back(nums,ans,visited,deque);
return ans;
}
void back(int[] nums, List<List<Integer>> ans, boolean[] visited, Deque<Integer> deque){
if(deque.size() == nums.length){
ans.add(new ArrayList<>(deque));
return;
}
for(int i=0;i<nums.length;i++){
if(!visited[i]){
visited[i] = true;
deque.addLast(nums[i]);
back(nums, ans, visited, deque);
deque.removeLast();
visited[i] = false;
}
}
}
}