给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [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>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
backTrack(nums, temp, result);
return result;
}
/**
* 回溯法模板
* @param nums
* @param temp
* @param result
*/
private static void backTrack(int[] nums, List<Integer> temp, List<List<Integer>> result) {
判断是否找到正确路径,找到就加入到结果中
if (temp.size() == nums.length) {
result.add(new ArrayList<>(temp));
return;
}
for (int i = 0; i < nums.length; i++) {
判断是否有重复
if (temp.contains(nums[i])) {
continue;
}
添加步数
temp.add(nums[i]);
继续找路
backTrack(nums, temp, result);
找下条同级别路径前先退回上一步
temp.remove(temp.size()-1);
}
}
}