问题:
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
解答思路:
使用回溯算法生成全排列的 Java 代码:
import java.util.ArrayList;
import java.util.List;
class Permute {
private List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> permute(int[] nums) {
backtrack(new ArrayList<>(), nums);
return result;
}
private void backtrack(List<Integer> current, int[] nums) {
if (current.size() == nums.length) {
result.add(new ArrayList<>(current));
return;
}
for (int i = 0; i < nums.length; i++) {
if (!current.contains(nums[i])) {
current.add(nums[i]);
backtrack(current, nums);
current.remove(current.size() - 1);
}
}
}
public static void main(String[] args) {
Permute permute = new Permute();
int[] nums = {1, 2, 3};
List<List<Integer>> permutations = permute.permute(nums);
for (List<Integer> permutation : permutations) {
System.out.println(permutation);
}
}
}
上述代码使用回溯法遍历排列树,通过递归的方式从左到右枚举每个空位,然后选择一个未被使用过的数字填入,并将该数字从可选数字列表中移除。当填满所有位置后,得到一个排列,并将其加入结果列表中。最后,通过遍历结果列表并输出每个排列,得到示例中的全排列结果。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)