问题描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
解答
//类似于八皇后那道题。 class Solution { List<List<Integer>> list1; public void dfs(int[] nums, List<Integer> temp, int index, int size, int temp_size){ if(index >= size){ if(temp_size == size){ list1.add(new ArrayList<Integer>()); list1.get(list1.size()-1).addAll(temp); temp.remove(temp_size - 1); temp_size--; } int i = Arrays.binarySearch(nums, temp.get(temp_size - 1)); temp.remove(temp_size - 1); temp_size--; if(i+1 >= size && temp_size == 0)return; dfs(nums, temp, i+1, size, temp_size); } if(index < size){ if(!temp.contains(nums[index])){ temp.add(nums[index]); temp_size++; dfs(nums, temp, 0, size, temp_size); }else{ dfs(nums, temp, index+1, size, temp_size); } } } public List<List<Integer>> permute(int[] nums) { list1 = new ArrayList<List<Integer>>(); if(nums.length == 0){ list1.add(new ArrayList<Integer>()); return list1; } else if(nums.length == 1){ List<Integer> t = new ArrayList<Integer>(); t.add(nums[0]); list1.add(t); return list1; } Arrays.sort(nums); dfs(nums, new ArrayList<Integer>(), 0, nums.length, 0); return list1; } }