首页 > 其他分享 >带重复元素的排列

带重复元素的排列

时间:2023-06-15 14:34:16浏览次数:60  
标签:排列 nums 重复 元素 list dfs book ans new


带重复元素的排列

题目:

描述
给出一个具有重复数字的列表,找出列表所有不同的排列。

样例
样例 1:
输入:
nums = [1,1] 
输出:
[ 
  [1,1] 
] 
解释:
[1,1]的不同排列只有[1,1]。

样例 2:
输入:
nums = [1,2,2] 
输出:
[ 
  [1,2,2], 
  [2,1,2], 
  [2,2,1] 
]

解题思路:首先思考如何去重,先对数组进行排序后再使用标记数组来进行标记,之后进行dfs即可

public class Solution {
    /*
     * @param :  A list of integers
     * @return: A list of unique permutations
     */
    
    private List<List<Integer>> ans = new ArrayList();
    public List<List<Integer>> permuteUnique(int[] nums) {
        // write your code here
        Arrays.sort(nums);
        dfs(nums, new boolean[nums.length], new ArrayList());
        return ans;
    }

    private void dfs(int[] nums, boolean[] book, List<Integer> list) {
        if(list.size() == nums.length) {
            ans.add(new ArrayList(list));
            return ;
        }

        for(int i = 0; i < nums.length; i++) {

            if(book[i]) {
                continue ;
            }
			
			// 防止元素重复 
			// book[i - 1] == false时表示 当前数和前一个数相等并且前一个数已经回溯完成
			// 如果此时再对该数进行回溯会导致结果重复
            if (i > 0 && nums[i] == nums[i - 1] && !book[i - 1]) {
                continue;
            }

            book[i] = true;
            list.add(nums[i]);
            dfs(nums, book, list);
            list.remove(list.size() - 1);
            book[i] = false;
        }
    }
};


标签:排列,nums,重复,元素,list,dfs,book,ans,new
From: https://blog.51cto.com/u_14813899/6487223

相关文章

  • DOM4J 工具类(以对象的方式增加和删除XML元素)
    packagenet.better_best.www.dynamicADPics.utils;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.dom4j.Attribute;......
  • CSS(语义化标签、多媒体标签、新表单元素、属性选择器、结构伪类选择器、伪元素选择器
    一、HTML5新特性概述HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。1语义化标签(★★)以前布局,我们基本用div来做。di......
  • java修改Set中的元素
    java修改Set中的元素一.问题的提出在java中,有以下代码:publicclassTest{publicstaticvoidmain(String[]args){Set<Stu>set=newHashSet<>();Stus1=newStu(1);Stus2=newStu(2);set.add(s1);set.add(s2);......
  • HTML页面元素解释
    HTML代表超文本标记语言,是用于在万维网上创建网页和构建其内容的标准标记语言。HTML是Web开发的支柱,也是创建基于Web的文档的基本构建块。让我们快速看一下它是如何工作的。(更多优质内容:java567.com)HTML有什么作用?HTML的主要作用是通过使用一组标签或元素来定义网页的......
  • JavaScript 动态编辑元素某属性值(例如:元素div的class属性)
    元素<divclass="h5-box-search-itemusimglistnodisplay"id="usimglist"></div>(满足条件)动态更新div元素的class属性值://获取目标容器letusimglist=document.getElementById('usimglist');//获取其class的属性值letclassinfo=usimglist.ge......
  • 从n个不同元素中有放回的取出r个且不计顺序,有多少种不同的取法?
    从n个不同元素中有放回的取出r个且不计顺序,有多少种不同的取法?答案是:\(C_{n+r-1}^r\)解析因为是有放回地取出,所以同一个元素可能会被取多次,并且取出的元素是不计顺序的,那么如果我们设\(x_i\)为第\(i\)个元素被取出的次数,问题就被转化为:\[\begin{aligned}x_1+x_2+\cdots+x_n......
  • java开发C语言解释器:数组元素的读取和赋值
    本节技术内容难度较大,请结合视频对代码的讲解和调试来理解本节内容:用java开发编译器一个成熟的编译器或解释器,要能够解析和执行目标语言开发的逻辑复杂的程序代码,我们用java开发的C语言解释器,能够执行用C语言开发的较为复杂的程序时,才称得上是合格的,从本节开始,我们致力于C语言解......
  • 面试算法:在整形数组中构建元素之和能整除数组长度的子集
    更详细的讲解和代码调试演示过程,请参看视频如何进入google,算法面试技能全面提升指南假设A是一个整数数组,长度为n,数组中的元素可能是重复的。设计一个算法,找到一系列下标的集合I={i(0),i(1),i(2)….i(n)}.使得(A[i(0)]+A[i(1)]+…A[i(n)])modn=0.例如假定A={711......
  • 面试算法:计算堆栈当前元素的最大值
    更详细的讲解和代码调试演示过程,请参看视频如何进入google,算法面试技能全面提升指南有一道堆栈相关算法题,我被面试过两次以上,看似其在算法面试中出现的概率很高,由此值得我们好好分析下。题目是这样的:对于堆栈的常用操作有,pop弹出堆栈顶部的元素;push向堆栈压入一个元素;peek获......
  • 2357.使数组中所有元素都等于零
    问题描述2357.使数组中所有元素都等于零(Easy)给你一个非负整数数组nums。在一步操作中,你必须:选出一个正整数x,x需要小于或等于nums中最小的非零元素。nums中的每个正整数都减去x。返回使nums中所有元素都等于0需要的最少操作数。示例1:输入:nums=......