zoukankan      html  css  js  c++  java
  • 047 Permutations II 有重复数字的全排列

    给定一个可能包含重复数字的集合,返回所有可能的不同全排列。
    例如,
    [1,1,2] 有以下不同全排列:
    [
      [1,1,2],
      [1,2,1],
      [2,1,1]
    ]

    详见:https://leetcode.com/problems/permutations-ii/description/

    Java实现:

    class Solution {
        public List<List<Integer>> permuteUnique(int[] nums) {
            List<List<Integer>> res = new ArrayList<List<Integer>>();
            int size = nums.length;
            if(size==0||nums==null){
                return res;
            }
            boolean[] used = new boolean[size];
            List<Integer> out = new ArrayList<Integer>();
            Arrays.sort(nums);
            dfs(nums, used, out,res);
            return res;
        }
    
        public void dfs(int[] nums, boolean[] used, List<Integer> out,List<List<Integer>> res) {
            if(out.size()==nums.length) {
                res.add(new ArrayList<Integer>(out));
                return ;
            }
            for (int i=0; i<nums.length; i++) {
                // 当前位置的数已经在List中了
                if(used[i]){
                    continue;
                }
                // 当前元素与其前一个元素值相同 且 前元素未被加到list中,跳过该元素
                if(i>0 && nums[i]==nums[i-1] && !used[i-1]){
                    continue;
                }
                // 深度优先搜索遍历
                used[i]=true;
                out.add(nums[i]);
                dfs(nums, used, out, res);
                out.remove(out.size()-1);
                used[i]=false;
            }
        }
    }
    

    参考:https://blog.csdn.net/jacky_chenjp/article/details/66477538

  • 相关阅读:
    PTA 程序设计题(数据结构第一章)
    (考研)计算机组成原理之计算机系统概论
    C语言复习
    vs2019 scanf 解决 C4996问题
    数据结构之链表
    数据结构之表、栈、队列
    数据结构之算法分析
    数据结构泛型之初接触
    数据结构之递归
    学习参考
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8691406.html
Copyright © 2011-2022 走看看