回溯法4,排列问题,带条件

Posted arxobject

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯法4,排列问题,带条件相关的知识,希望对你有一定的参考价值。

一.题源

  https://www.lintcode.com/problem/permutations-ii/description

  https://leetcode-cn.com/problems/permutations-ii/

 

二.代码分析

 

 1 public class Solution {
 2     public static void main(String[] args) {
 3        int[] arr = new int[]{1,2,2};
 4         Arrays.sort(arr);
 5         ArrayUtils.displayArrayList(permuteUnique(arr));
 6     }
 7 
 8     public static List<List<Integer>> permuteUnique(int[] nums) {
 9         List<List<Integer>> result = new ArrayList<>();
10         boolean[] usedTable = new boolean[nums.length];
11         backTrace(result,new ArrayList<>(),nums,usedTable);
12 
13         return result;
14     }
15 
16     private static void backTrace(List<List<Integer>> result,List<Integer> list,int[] nums,boolean[] used){
17         if(list.size() == nums.length){
18             result.add(new ArrayList<>(list));
19             return;
20         }
21 
22         for (int i = 0; i < nums.length; i++) {
23             if(used[i]){
24                 continue;
25             }
26             if( i>=1 && !used[i-1] && !used[i] && nums[i]==nums[i-1]){
27                 continue;
28             }
29             list.add(nums[i]);
30             used[i] = true;
31             backTrace(result,list,nums,used);
32             list.remove(list.size()-1);
33             used[i] = false;
34         }
35     }
36 }

 

 

三.图解分析

技术图片

 

 

四.总结

注意事项:关键点在于设置好过滤条件

 

以上是关于回溯法4,排列问题,带条件的主要内容,如果未能解决你的问题,请参考以下文章

面试常考算法题---回溯法(学习笔记)

求教C语言回溯法写出八皇后问题的92种解

回溯法分支限界法两种思想帮你轻松搞定旅行售货员问题(TSP)

回溯算法

第一节.排列组合

Leetcode之深度遍历递归与回溯法汇总