- 题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
来源:LeetCode
- 示例
输入: [1,2,3]
输出: [[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
- 思路分析
就是很简单的回溯算法,剪枝都不需要。
- JAVA实现
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> perm = new ArrayList();
List<Integer> small = new ArrayList<Integer>();
int[] used = new int[nums.length];
for(int i=0;i<nums.length;i++) used[i] = 0;
tb(nums, perm, small, used);
return perm;
}
public void tb(int[] nums, List<List<Integer>> perm, List<Integer> small, int[] used) {
boolean all_used = true; //判断是否所有数字多已经用过了,
for(int i=0;i<used.length;i++) {
if(used[i] == 0) {
all_used = false; //有还没有用过的数字
small.add(nums[i]);
used[i] = 1;
tb(nums, perm, small, used);
used[i] = 0;
small.remove(small.size()-1);
}
}
if(all_used == true) //所有数字都用过了,说明找到了一个排列
perm.add(new ArrayList<>(small));
}
}