原题网址: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;
}
}

本文详细解析了LeetCode上的一道经典题目——全排列问题。通过深度优先搜索算法实现对给定数字集合的所有可能排列进行求解,并提供了完整的Java代码实现。
187

被折叠的 条评论
为什么被折叠?



