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. 全排列的主要内容,如果未能解决你的问题,请参考以下文章

46. 全排列

46. 全排列

46. 全排列

力扣-46-全排列

LeetCode #46 全排列

Leetcode46. Permutations(全排列)