C++中的全排列可以直接调用next_permutation()函数,Java没有此函数,手写一个作为模板
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
简单的回溯思想,代码很简单,不解释
代码:
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
int vis[] = new int[nums.length];
ArrayList tmp = new ArrayList();
backtrack(ans, nums, tmp, vis);
return ans;
}
private void backtrack(List<List<Integer>> res, int[] nums, ArrayList<Integer> tmp, int[] visited) {
if(tmp.size() == nums.length){
res.add(new ArrayList<>(tmp));
tmp = new ArrayList<>();
return;
}
for(int i = 0; i<nums.length; i++){
if(visited[i] == 0){
visited[i] = 1;
tmp.add(nums[i]);
backtrack(res, nums, tmp, visited);
tmp.remove(tmp.size()-1);
visited[i] = 0;
}
}
}
}