原题网址:https://leetcode.com/problems/permutations/
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
方法:深度优先搜索。
public class Solution {
private List<List<Integer>> permutations = new ArrayList<>();
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
private void dfs(int[] nums, int step) {
if (step == nums.length-1) {
List<Integer> permutation = new ArrayList<>(nums.length);
for(int i=0; i<nums.length; i++) permutation.add(nums[i]);
permutations.add(permutation);
return;
}
for(int i=step; i<nums.length; i++) {
swap(nums, step, i);
dfs(nums, step+1);
swap(nums, step, i);
}
}
public List<List<Integer>> permute(int[] nums) {
dfs(nums, 0);
return permutations;
}
}