46. 全排列
Posted vshen999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了46. 全排列相关的知识,希望对你有一定的参考价值。
题目描述查看:https://leetcode-cn.com/problems/permutations/
题目的意思是,给定一个无重复数组,求这些数组元素的全排列。
-
思路
典型的回溯问题,找到退出条件,已选结果,候选结果即可。
定义回溯方法,choose表示已选结果,candidate表示候选结果。
private void permuteHelper(List<Integer> choose,List<Integer> candidate)
退出条件是candidate中没有元素。
if(candidate.isEmpty()) { List<Integer> save = new ArrayList<>(choose); reuslt.add(save); return; }
-
代码
1 public class Main { 2 private List<List<Integer>> reuslt = new ArrayList<>(); 3 4 public List<List<Integer>> permute(int[] nums) { 5 List<Integer> choose = new ArrayList<>(); 6 List<Integer> candidate = Arrays.stream(nums).boxed().collect(Collectors.toList()); 7 permuteHelper(choose,candidate); 8 return reuslt; 9 } 10 11 private void permuteHelper(List<Integer> choose,List<Integer> candidate){ 12 if(candidate.isEmpty()) { 13 List<Integer> save = new ArrayList<>(choose); 14 reuslt.add(save); 15 return; 16 } 17 18 for (int i = 0; i < candidate.size(); i++) { 19 choose.add(candidate.get(i)); 20 List<Integer> tmp = new ArrayList<>(candidate); 21 tmp.remove(i); 22 permuteHelper(choose,tmp); 23 choose.remove(choose.size()-1); 24 } 25 }
以上是关于46. 全排列的主要内容,如果未能解决你的问题,请参考以下文章