题目
给定一个不含重复数字的数组
nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
解题思路
- 因为是全排序,所以可以先将数组转换成列表再对列表进行操纵;
- 通过不断固定每个位置的元素,然后递推下一个元素。
代码展示
class Solution { List<List<Integer>> ans = new ArrayList<>(); List<Integer> data = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { //全排列将数组元素存放到列表中 for (int num : nums){ data.add(num); } dfs(0); return ans; } private void dfs(int index){ if(index == data.size() - 1){ ans.add(new ArrayList<>(data)); return; } for (int i = index; i < data.size(); i++){ //将data.get(i)固定在x位置; swap(i,index); //递归固定下一个元素 dfs(index + 1); //撤销交换 swap(i,index); } } //交换元素位置 private void swap( int resource, int target){ int temp = data.get(resource); data.set(resource,data.get(target)); data.set(target,temp); } }