leetcode47-Permutations II

分析

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例 1:
输入:nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]

题目

由于元素是重复的,要求返回不重复的,所以一定会有剪枝的动作,具体的思路就是给数组排序,然后发现上一个元素和当前元素一样的话就没必要再遍历了。这里需要注意的是剪枝不能解决掉所有的重复元素的问题,比如0,0,0,1,9这样的序列,在第0个元素求解完以后递归求解第1个元素的时候,由于俩个元素都是0所以肯定会发生重复,所以这里可以再用一个set来存储全排序列

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;public class permutationsII {private static Set<List<Integer>> set = new HashSet();public static void main(String[] args) {int[] arr = {0,1,0,0,9};Arrays.sort(arr);getRank(arr,0,arr.length);List<List<Integer>> res = new ArrayList();res.addAll(set);for(List<Integer> lis : res) {for(Integer data:lis) {System.out.print(data + " ");}System.out.println();}}public static void getRank(int[] nums,int start,int len) {if(start + 1 == len) {List<Integer> lis = new ArrayList();for(int i = 0;i<len;i++) {lis.add(nums[i]);}set.add(lis);return;}for(int i = start;i<len;i++) {if(start < i && nums[i-1] == nums[i]) {continue;}int tmp = nums[start];nums[start] = nums[i];nums[i] = tmp;getRank(nums,start+1,len);tmp = nums[start];nums[start] = nums[i];nums[i] = tmp;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营 总结篇

代码随想录算法训练营 总结篇 历时两个月的算法训练结束了&#xff01;首先恭喜我自己&#xff0c;中间虽然拖拉了几天&#xff0c;但总是补上了&#xff0c;也算是成功完成了训练。 虽然已经大三了&#xff0c;但是没有系统的刷过算法。之前在课上也是老师讲完就完了&#x…

交友软件源码-源码+搭建+售后,上线即可运营聊天交友源码 专业语聊交友app开发+源码搭建-快速上线

交友小程序源码是一种可以帮助开发者快速搭建交友类小程序的代码模板。它通常包括用户注册、登录、个人信息编辑、匹配推荐、好友聊天等常见功能&#xff0c;以及与后台数据交互的接口。使用这种源码可以极大地缩短开发时间&#xff0c;同时也可以根据自己的需求进行二次开发和…

从0到1开发一个vue3+ts项目(一)

1. 环境配置 1.1 安装node 使用官方安装程序 前往 Node.js 官网&#xff1a;访问 Node.js 官网&#xff0c;下载适合你操作系统的安装程序。运行安装程序&#xff1a;下载完成后&#xff0c;双击安装程序并按照提示进行安装。验证安装&#xff1a;安装完成后&#xff0c;在终…

一些有趣的Chrome命令行调用例子

Chrome浏览器支持多种命令行参数&#xff0c;这些参数可以用于定制浏览器行为或进行调试。以下是一些有趣的Chrome命令行调用例子&#xff1a; 以Kiosk模式启动Chrome: google-chrome --kiosk http://www.example.com 启动Chrome并禁用所有插件: google-chrome --disable-plug…

C++基础-编程练习题及答案

文章目录 前言一、查找“支撑数”二、数组元素的查找三、爬楼梯四、数字交换五、找高于平均分的人 前言 C基础-编程练习题和答案 一、查找“支撑数” 【试题描述】 在已知一组整数中&#xff0c; 有这样一种数非常怪&#xff0c; 它们不在第一个&#xff0c; 也不在最后一个&…

C++对象的拷贝构造函数

如果一个构造函数的第一个参数是类本身的引用,且没有其它参数(或者其它的参数都有默认值),则该构造函数为拷贝构造函数。 拷贝(复制)构造函数:利用同类对象构造一个新的对象 ●1.函数名和类同名 (构造函数) ●2.没有返回值 (构造函数) ●3.第一个参数必…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统&#xff08;DataBas…

MySQL环境搭建

MySQL 环境搭建 一、卸载不需要的MySQL环境 #1.关闭服务 systemctl stop mysql #2.查找MySQL安装包&#xff0c;并删除 rpm -qa&#xff1b;xargs yum remove -y 二、获取MySQL官方yum源 http://repo.mysql.com/ 根据系统版本下载对应的文件&#xff1b;然后使用rz将文件传…

【C++】模拟实现string

文章目录 前言成员变量成员函数构造函数拷贝构造函数浅拷贝深拷贝拷贝构造函数实现 析构函数赋值重载 空间管理函数元素访问元素修改字符串运算流提取 & 流插入流提取流插入 迭代器begin & endrbegin & rend 总结 前言 模拟实现不是为了写得和库里面一样好。而是为…

OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅

在追求知识的道路上&#xff0c;一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择&#xff0c;以其独特的功能和卓越的性能&#xff0c;为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术&#xff0c;能够快速准确地提取文档中的关键信息…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮&#xff0c;鼠标放在按钮上可以弹性拉出的三个按钮&#xff0c;使用贝塞尔曲线实现&#xff0c;项目demo显示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

Day 43 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

最后一块石头重量Ⅱ 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

厚德提问大佬答4:AI绘画生成的心得

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

什么是async和await?

async 和 await 是 JavaScript&#xff08;特别是 ES2017 及更高版本&#xff09;中用于处理异步操作的关键字。它们使得异步代码看起来、写起来更像同步代码&#xff0c;从而提高了代码的可读性和可维护性。 async async 是一个函数修饰符&#xff0c;用于声明一个函数是异步…

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 &#xff08;1&#xff09;熟悉贪心法的设计思想 &#xff08;2&#xff09;理解贪心法的最优解与正确性证明之间的关系 &#xff08;3&#xff09;比较活动选择的各种“贪心”策略&#xff0c;…

安卓手机APP开发__设备兼容性概述

安卓手机APP开发__设备兼容性概述 目录 概述 兼容性意味着什么? 控制你的APP对设备的可用性 设备特性 平台版本 屏幕配置

基于AI的Python爬虫-Scrapegraph-ai

网址 https://github.com/VinciGit00/Scrapegraph-ai 刚从github榜单看到的&#xff0c;将ai和爬虫结合起来的项目&#xff0c;我没安装&#xff0c;凡是关于ai的要么自己下载模型&#xff0c;要么用在线的api&#xff0c;这两样我现在都懒得装。 看介绍的话可以根据自然语言…