码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 47 包含重复的全排列

时间:2019-04-18 09:18:45      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:for循环   col   key   code   visit   OLE   help   style   turn   

思路:

和基础版的全排列很像。关键在于:需要判断同样值的元素在当次递归的for循环中是否已经处理过,如果已经处理过,则忽略。这里选择用map来记录。

 

 1 class Solution {
 2     private List<List<Integer>> ans = new ArrayList<>();
 3     public List<List<Integer>> permuteUnique(int[] nums) {
 4         ans.clear();
 5         if (nums == null || nums.length == 0) {
 6             return ans;
 7         }
 8         int n = nums.length;
 9         helper(nums, new ArrayList<Integer>(), 0, n);
10         return ans;
11     }
12     
13     public void helper(int[] nums, List<Integer> tmp, int k, int n) {
14         if (k == n) {
15             ans.add(new ArrayList<Integer>(tmp));
16             return;
17         }
18         
19         Map<Integer, Boolean> isVisit = new HashMap<>();
20         for (int i = k; i < n; i++) {
21             if (!isVisit.containsKey(nums[i])) {
22                 tmp.add(nums[i]);
23                 swap(nums, k, i);
24                 helper(nums, tmp, k + 1, n);
25                 swap(nums, k, i);
26                 tmp.remove(tmp.size() - 1);
27                 isVisit.put(nums[i], true);
28             }
29         }
30     }
31     
32     public void swap(int[] nums, int i, int j) {
33         int tmp = nums[i];
34         nums[i] = nums[j];
35         nums[j] = tmp;
36         return;
37     }
38 }

 

其他的没什么好说的,都是模式化的东西。

 

leetcode 47 包含重复的全排列

标签:for循环   col   key   code   visit   OLE   help   style   turn   

原文地址:https://www.cnblogs.com/hiyashinsu/p/10727354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!