当前位置: 首页 > news >正文

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.lryc.cn/news/342693.html

相关文章:

  • 246 基于matlab的交流电机动态方程
  • 7天入门Android开发之第2天——四大组件之活动
  • 自然语言(NLP)
  • 学习java第六十天
  • OpenFeign修改HttpClient为Apache HttpClient 5
  • 【busybox记录】【shell指令】comm
  • 工作中遇到的问题,如何解决的
  • 数据结构(c):队列
  • Vue单页面应用和多页面应用的区别
  • php扩展
  • mac电脑如何安装python及环境搭建
  • 大数据高级阶段面试题(实时)
  • Material Studio 计算分子静电力、电荷密度以及差分电荷密度
  • 华为鸿蒙系统(Huawei HarmonyOS)
  • docker jenkins 部署springboot项目
  • 记录一个练手的js逆向password
  • 如何低成本创建个人网站?
  • Finder Windows for Mac:双系统窗口,一键切换!
  • Hadoop3:集群搭建及常用命令与shell脚本整理(入门篇,从零开始搭建)
  • yolo-world:”目标检测届大模型“
  • vue3 + ts 快速入门(全)
  • vue2实现面包屑功能
  • helm安装 AWS Load Balancer Controller
  • 贪吃蛇大作战(C语言--实战项目)
  • 谷歌确认:链接并不那么重要
  • python基础--修饰器
  • 6. Z 字形变换
  • shell常用文件处理命令
  • 从Paint 3D入门glTF
  • 数据库(MySQL)—— DQL语句(基本查询和条件查询)