46. Permutations
Description
描述:https://leetcode.com/problems/permutations/description/
题意:返回一个数组的全排列
Solution: (Java)
class Solution {
List<List<Integer>> result = new ArrayList<>();
int[] visited;
public List<List<Integer>> permute(int[] nums) {
List<Integer> list = new ArrayList<>();
visited = new int[nums.length];
int count = 0;
backtracking(nums, list, count);
return result;
}
public void backtracking(int[] nums, List<Integer> list, int count) {
if (count == nums.length) {
List<Integer> temp = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
temp.add(list.get(i));
}
result.add(temp);
}
for (int i = 0; i < nums.length; i++) {
if (visited[i] == 0) {
visited[i] = 1;
list.add(nums[i]);
backtracking(nums, list, count+1);
list.remove(list.size()-1);
visited[i] = 0;
}
}
}
}
思路
- 典型的回溯法,时间复杂度超过 97.71%;
- 这里的回溯法需要一个
visited
数组来记录已访问的数组,因为每个数只能访问一次。