Java中实现数组全排列

2023-11-19

全排列 : 

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列

例如:

1 、2 、3三个元素的全排列为:

{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。

解法1(递归)

递归的话就很简单了,以{1,2,3}为例,它的排列是:

以1开头,后面接着{2,3}的全排列,

以2开头,后面接着{1,3}的全排列,

以3开头,后面接着{1,2}的全排列。


public  void Permutation(char chs[],int start )
    {
        if(start==chs.length-1)
        {
            Arrays.toString(chs);
            //如果已经到了数组的最后一个元素,前面的元素已经排好,输出。
        }
        for(int i=start;i<=chs.length-1;i++)
        {
        //把第一个元素分别与后面的元素进行交换,递归的调用其子数组进行排序
                Swap(chs,i,start);
                Permutation(chs,start+1);
                Swap(chs,i,start);
        //子数组排序返回后要将第一个元素交换回来。  
        //如果不交换回来会出错,比如说第一次1、2交换,第一个位置为2,子数组排序返回后如果不将1、2
        //交换回来第二次交换的时候就会将2、3交换,因此必须将1、2交换使1还是在第一个位置 
        }
    }
    public  void Swap(char chs[],int i,int j)
    {
        char temp;
        temp=chs[i];
        chs[i]=chs[j];
        chs[j]=temp;
    }

解法2(字典序法)

字典序法 
对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后。 
列如:对a、b、c进行排序的结果是{a,b,c}、{a,c,b}、{b,a,c}、{b,c,a}、{c,a,b}、{c,b,a} 
字典序法的优点是排列的结果按照顺序输出并且对于重复的元素不进行重复排序。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中实现数组全排列 的相关文章

  • vscode前端常用插件 最新版

    1 不需要安装的插件 序号 名称 作用 settings json配置 1 Auto Rename Tag 自动关闭标签 editor linkedEditing true 2 Auto Close Tag 标签自动闭合 html auto
  • mysql 时间_MySQL中日期和时间类型

    1 日期类型 MySql中关于日期的类型有Date Datetime Timestamp三种类型 日期赋值时 允许 不严格 语法 任何标点符都可以用做日期部分或时间部分之间的间割符 例如 98 12 31 11 30 45 98 12 31
  • 宝塔 Error: BT-Task service startup failed. 问题原因以及解决方法

    因为我个人电脑用的是py3 所以自带py2的宝塔就自以为是升级了 还替换掉了宝塔的py2 因为py2和py3包和语法有部分不一样 所以不能用 导致重启服务器后失效 解决方法就是替换回来 先看看现在的Python版本 python v 如果是
  • Excel脱拽或者下拉公式时, 保持公式里单元格数字不变

    绝对引用 可以选中B1 用F4快捷键自己就给加绝对引用符号了 然后回车 复制或者拖拽 转载于 https www cnblogs com baxianhua p 9995530 html
  • SSL与TLS工作原理

    链接 https zhuanlan zhihu com p 36981565 为了保证网络通信的安全性 需要对网络上传递的数据进行加密 现在主流的加密方法就是SSL Secure Socket Layer TLS Transport Lay
  • 第5讲:VUE3工程中实现页面加载中效果和页面切换动画效果。

    VUE3工程发布后的运行过程为先加载html面 再通过html页中的js加载单页面js来渲染页面并显示 根据这个加载过程 实现页面加载中的原理是预先在html中显示加载中 再单页面数据加载完成在mounted时隐藏加载中 即实现想要的效果
  • 轻量级分割网络总结

    目录 ddrnet STDC Seg 重新思考BiSeNet ExtremeC3Net DFANet NfS SegNet 好像未开源 人像分割
  • 操作系统常见面试题及答案

    操作系统 从系统观点看 是计算机系统的一个系统软件 管理和控制计算机系统中的资源 从用户观点看 操作系统是用户与计算机之间的接口 从软件观点看 操作系统是程序和数据结构的集合 1 什么是进程 process 和线程 thread 有何区别
  • linux中esc无法正常退出insert

    ctrl c
  • 在android 输出log 信息 用于调试

    要想在 jni native 代码中看打印信息 printf 是不行的 需使用 android log print 如下所示 android log print ANDROID LOG INFO ProjectName I am d n n
  • python的文件操作

    一 文件的基本操作 1 读文件read f open filename r encoding utf 8 data f read 读文件 f close 关闭文件 1 绝对路径的易错点 文件路径中 前要加转义字符 或者 使用r使转义字符失效
  • Android declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用

    android 自定义属性类型的使用 转自 http www cnblogs com ufocdy archive 2011 05 27 2060221 html 做Android布局是件很享受的事 这得益于他良好的xml方式 使用xml可
  • 关于define与defined的区别

    1 define用来定义一个常量 常量也是全局范围的 不用管作用域就可以在脚本的任何地方访问 常量 一个常量一旦被定义 就不能再改变或者取消定义 如 define path root www web define 为常量的值root www
  • 什么是计算机域名和域名定义?

    domain is a very popular term used in computer and information technology Users generally do not know or misinterpret th
  • BAT面试题 - 找一个无序实数数组中的最大差值

    题目描述 一个无序的实数数组a i 要求求里面大小相邻的实数的差的最大值 比如 double a 1 5 4 0 2 100 这个无序的数组 相邻的数的最大差值为100 5 95 题目分析 这题有个简单的做法 首先就是对数组进行一个排序 然
  • 免费送书啦!细数Github大神们的开源书籍!

    作者 弗拉德 来源 弗拉德 公众号 fulade me Go 系列 Mastering GO 推荐语 本书适用于Golang程序员 您之前应该阅读有关Go的介绍性书籍 本书的内容包括但不限于并发 网络编程 垃圾回收 组合 GO UNIX系统
  • STM32F10X_系统定时器(systick)

    目录 1 参考文献 2 systick简介 3 systick寄存器 3 1 控制及状态寄存器 3 2 重装载数值寄存器 3 3 当前数值寄存器 3 4 校准数值寄存器 4 systick中断时间计算 5 systick配置库函数 1 参考
  • YOLOv5 提升模型训练结果小技巧

    一 数据集 1 每类图片数 建议 gt 1500张 2 每类实例数 推荐每类标签实例数 gt 10000 3 图片多样性 必须代表部署环境 对于现实世界我们推荐图片来自一天中不同时间 不同季节 不同天气 不同光照 不同角度和不同相机等 4
  • 线程封闭概念

    线程封闭概念 为什么要有线程封闭这个概念呢 多线程中访问共享可变数据时 涉及到线程间数据同步的问题 并不是所有时候都需要共享数据 所以线程封闭概念就出来了 在Java中线程封闭该怎么做呢 可以通过两个方法来做 ThreadLocal 1 T
  • 34 openEuler使用LVM管理硬盘-创建并挂载文件系统

    文章目录 34 openEuler使用LVM管理硬盘 创建并挂载文件系统 34 1 创建文件系统 34 2 手动挂载文件系统 34 3 自动挂载文件系统 34 openEuler使用LVM管理硬盘 创建并挂载文件系统 在创建完逻辑卷之后 需

随机推荐

  • android代码获取当前package的de目录

    获取de目录首先要获取DE CONTEXT Context deContext getApplicationContext createDeviceProtectedStorageContext 然后通过DE CONTEXT获取de目录 S
  • SpringBoot + MyBatis-plus + Druid 实现简单增删查改、动态条件查询和分页功能

    本文主要讲解 SpringBoot集成Mybatis plus 数据库连接池使用alibaba的druid 实现简单增删查改 动态条件查询和分页功能 项目整体结构 项目添加相关框架依赖 pom xml
  • 辐射强度、辐亮度、辐照度——一文搞定

    先写定义 上图是从网上看到的并重写的 其中我们最容易混淆的就是辐射强度 辐亮度 辐照度的关系 如果我们没有接触专业领域 那么我们可能接触最多的就是辐射强度 而这种现象是不对的 因为我们一般考虑的均为这光好强呀 照得屋里特别亮 这里的光亮 我
  • untiy的纹理格式介绍

    Desktop RGB Compressed DXT1 压缩的RGB纹理 这是最常见的漫反射纹理格式 4位 像素 32 KB 256x256 RGBA Compressed DXT5 压缩的RGBA纹理 这是漫反射和高光控制纹理的主要格式
  • 如何区分网线是几类的_怎么看网线是几类?

    我来回答下本行业的问题 我是做智能化弱电的 在弱电监控系统中网线是连接弱电局域网中必不可少的材料 也是综合布线系统中最常用的一种传输材质 网线是由4对线8芯组成 每芯都有颜色区分 用于数据传输 网线的分类 网线按照性能划分 可以分为五类线
  • 基于sklearn的简单分类器

    基于sklearn的简单分类器 输入 输出 3 1 0 2 5 1 1 8 1 6 4 0 5 2 0 3 5 1 4 7 1 4 1 0 7 5 已知部分输入和部分输出求当输入为7 5时输出为多少 我们观察上面的规律不难发现 当输入的第一
  • react 使用 scss

    react 使用 scss 日常记录开发中遇到的坑 1 使用 npm install sass loader node sass S 进行安装 2 在页面中直接使用 有时候可以 有时候不行 原因 我个人觉得安装的两个插件本版兼容问题 nod
  • vue,vue-cli和@vue/cli是什么关系?有什么区别?

    vue是构建用户界面的渐进式JavaScript 框架 vue cli是vue的一个官方脚手架工具 快速工程化命令工具 用来帮助程序员们快速搭建基于vue框架的开发环境 vue有很多脚手架工具 vue cli只是其中一种 侧重于单页面应用
  • pytorch 取对角线元素/矩阵对角线元素置0

    pytorch 取对角线元素 矩阵对角线元素置0 使用 torch diag 取对角线元素 使用 torch diag embed 恢复维度 import torch a torch randn 3 3 print a tensor 0 7
  • 在Echarts中的tooltip上添加点击按钮

    需求 在Echarts的tooltips中添加点击按钮并可以鼠标悬停点击该按钮 功能实现 在option中的tooltip添加enterable true的属性 表示鼠标可以移入tooltip中 再在formatter中添加
  • 从Java到区块链:如何成为区块链开发人员

    最近这些天 区块链是每个开发人员的谈资 来自各个领域的许多软件开发商现在正试图进入区块链市场 我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出区块链开发方面的第一步的 希望对大家有所帮助 JAX
  • 上海链节科技:通证经济的到来,拉开了去中心化协作序幕

    国家在肯定扶持区块链技术的同时 也针对币圈进行了强监管 区块链行业经历疯狂到沉默 开始回归理性 重新审视技术带来的变革 技术是无罪的 分布式存储 去中心化 智能合约 加密 挖矿等种种技术或设计理念 都是为了保障信任 实现价值传递 降低交易成
  • Dockerfile: ENTRYPOINT vs CMD

    Dockerfile ENTRYPOINT和CMD的区别 dongmao zhang software engineer 132 人赞同了该文章 翻译 Dockerfile ENTRYPOINT vs CMD 在我们查阅Dockerfile
  • ANDROID

    1 环境构建 2 模拟测试 3 Activity 4android中的资源 5 UI 6 各种控件
  • 剑指offer第二版面试题20:表示数值的字符串(java)

    题目描述 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 分析 1 在数值之前
  • ubuntu18.04上安装TensorFlow2.0

    推特上几乎每天都有关于深度学习中Keras TensorFlow哪个个才是最好的框架的口水战 2019年后 这将不在是个问题 2019年初 tf keras 子模块已引入TensorFlow v1 10 0中 现在 在TensorFlow
  • 线性代数——二次型

    一 通过矩阵研究二次方程 二次型的定义 把含有n个变量的二次齐次函数或方程称为二次型 例如 二次型可以用矩阵来表示 可以表示为 更一般的情况 可以表示为 令 则上式表示为 这就是我们常见的二次型表示方式 在 Linear Algebra a
  • spark groupByKey和groupBy,groupByKey和reduceByKey的区别

    1 groupByKey Vs groupBy 用于对pairRDD按照key进行排序 author starxhong object Test def main args Array String Unit val sparkConf n
  • java文件引用规则 同目录的不用引用 包中的需要引用

    import com Employee public class Hello public static void main String args Person p new Person John Doe11 Employee e new
  • Java中实现数组全排列

    全排列 从n个不同元素中任取m m n 个元素 按照一定的顺序排列起来 叫做从n个不同元素中取出m个元素的一个排列 当m n时所有的排列情况叫全排列 例如 1 2 3三个元素的全排列为 1 2 3 1 3 2 2 1 3 2 3 1 3 1