全排列算法(java实现)

2023-10-28

100题目之53题目和70题目

在做100题目的时候,全排列的算法困扰了很久,虽然网上了搜了一些资料,可是并没有搞懂。今天花了一个下午的时间,从新梳理了一遍,终于弄明白了。

全排列的算法,递归分析网上都有:

http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html

设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。

因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。当n = 1时perm(p} = r1。

实现java代码如下:

关键的就是arrange方法的else里面的内容,我的理解是(以求str[] = {"a","b","c"}的排列为例子):

用i从str[st]做一遍循环:

每一次循环中,都要将str[i]与str[i]互相调换位置:第一次开始,"a"与自己换,这时候,递归调用arrange[str,st + 1, len]

这是在求取str[str...len - 1]的排列即"b","c"的排列;

第二次,"a"与"b"互相调换,递归调用arrange[str,str + 1, len]就是在求取{"a","c"}的排列。

第三次,"a"与"c"互相调换,递归调用arrange[str, str + 1,len]就是在求取"{"b","a}的排列。

下面再以"b","c"的排列求取为例:

首先还是做循环,第一次,"b"与自己调换,这时候,调用arrange[str,st + 1,len], 就是求c的排列。呵呵,这时候终于到了函数递归调用的出口了

: st = len - 1。输出"b" "c";

第二次,类似的,输出"c","b";

至此,"b" "c"的排列求取完毕。加上前面的a,就输出"a""b""c" "a""c""b"。

类似的,就可以输出所有的排列了。


 


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

全排列算法(java实现) 的相关文章

  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 C# 读取 Soap 消息

  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 人工智能的动作来看这四家:百度、谷歌、微软、Facebook

    人工智能的动作来看这四家 百度 谷歌 微软 Facebook 人工智能已经成了兵家必争之地 但说句实在话 也都是准备的姿势 不过 瞭望未来的AI大战 积极的人才 设施 技术储备都是刚需 近日 美国 财富 杂志 Fortune 发表题为 Wh
  • 按键开关机电路

    1 目标 今天我们利用MOS管来设计一个按键开关机电路 2 要求 长按按键2秒钟松开后 系统电源启动 再长按2秒钟后 系统电源切断 3 分析 该电路设计的开始阶段应该是一个逻辑问题 后期器件选型以及参数确定才是一个硬件问题 下面只分析逻辑问
  • 各大AI开放平台汇总分析

    AI开放平台已经成为企业重要的基础设施 各大公司都建立了自己的AI开放平台 除了BAT 科大讯飞的建设的四大AI开放平台外 各公司纷纷推出了自己的人工智能平台 AI平台介绍和汇总如下 不断更新中 目录 百度AI开放平台 阿里云人工智能平台
  • 八步成功组织项目启动会议

    八步成功组织项目启动会议 项目启动会议将首次公布项目计划 这在很大程度上决定了项目是否能够圆满完成 你应该充分利用这个机会来给团队鼓劲 提出适当的期望 并根据时间和预算建立有助于项目顺利完成的指导方针 如果没有很好的准备项目启动会议 则会从
  • 电磁流量计测流工作原理及优缺点

    电磁流量计包含变送器和传感器 它们共同测量流量 电磁流量计的传感器采用直通连接 可测量流体在流经管道时产生的感应电压 变送器测量传感器产生的电压 将该电压转换成流量 然后再将流量测量值传送到控制系统 工作原理 电磁流量计是根据法拉第电磁感应
  • c 语言 模板函数,在 C 语言中实现模板函数的方法

    http blog csdn net whinah article details 13815 2004 各种用 C 语言实现的模板可能在使用形式上有所不同 现以一个求和函数 Sum 为例 用 C Template 可写如下 templat
  • 51单片机——独立按键

    如图是独立按键的原理图 通电后io口都是高电平 当按下K1 k4后 io口接地 变为低电平 说明当P30 P33为0时 代表我们按下了独立按键 例程1 独立按键控制LED亮灭 include
  • Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图

    Matlab根据flac pfc或其他软件导出的坐标及应力 位移数据再现云图 案例包括导出在flac6 0中导出位移的fish代码 也可以自己先准备软件导出的坐标数据及对应点的位移或应力数据 可根据需要自行修改为自己需要的云图数据 matl
  • 常用SQL语句

    一 基础1 说明 创建数据库CREATE DATABASE database name 2 说明 删除数据库drop database dbname3 说明 备份sql server 创建备份数据的 deviceUSE masterEXEC
  • 手机摄影_人像模式(双摄虚化Bokeh)

    很多人咨询我 手机上到底有哪些计算摄影的应用和技术 那么接下来就准备抽空写一系列文章做一下介绍 今天这一篇先从 人像模式 讲起 因为不管你现在是用iphone 还是小米 华为 OPPO VIVO 以及其他几乎所有品牌的手机 都已经能用这个功
  • 高仿“饿了么”Vue项目(一)

    高仿 饿了么 Vue项目 一 当我们把Vue框架的概念过了一遍之后 要进一步提升 就要看看别人是怎么使用Vue框架来做项目了 在github上有不少好的Vue项目 我找到了其中的一个 并把它作为下一步学习的目标 链接地址 https git
  • 使用docker/k8s部署vue项目

    使用docker k8s部署vue项目 1 编译前端项目 2 将前端文件打包 注意不要将dist目录打进去 自打dist里的文件 3 Dockerfile 本次打包将前端项目打入nginx镜像的html即可 FROM nginx MAINT
  • 最快捷方便的python安装库方法(适用于初学者)

    TOdfsa录标题 最快捷方便的python安装库方法 初学者 首先 当然我们首先已经安装好python以及其相关的环境配置 若是没有 当然也没有问题 我们可以从最初开始 详情请参考https www cnblogs com Coil177
  • 免费代理网址

    http www 66ip cn 66免费代理网 http www proxy360 cn Region China proxy360代理网 http www goubanjia com free gngn index shtml 转载于
  • MySQL-窗口函数&聚合函数

    从salaries表中查询emp no salary 并根据emp no字段升序累加salary作为running total字段 最后的结果如下图所示 MySQL语句如下 SELECT emp no salary SUM salary O
  • iOS 扩大UIView的点击范围原理

    扩大view点击范围的原理就是iOS的事件传递原理 事件从Window 上开始传递流程 首先执行window的hottest with event 方法 然后在该方法中会调用point inside 方法 判断点击点是否在 window中
  • 第五讲:常见的BeanPostProcessor

    常见的BeanPostProcessor 一 入门Demo 二 添加BeanPostProcessor 1 AutowiredAnnotationBeanPostProcessor 2 CommonAnnotationBeanPostPro
  • 关于SecureCRT输入无显示的问题解决办法

    在使用SecureCRT进行与ARM开发板TQ210做串口通信测试时 发现从开发板发数据能够在窗口中显示 而通过键盘输入时 SecureCRT不显示输入的内容 但敲Enter后 开发板也能接收到 这需要设置SecureCRT进行本地回显 L
  • 【牛客网SQL“必知必会”】刷题记录:一些容易遗忘的知识点

    目录 导读 SQL13 知识点 字符串 IN 范围选择 SQL14 知识点 BETWEEN 数值范围选择 SQL16 知识点 LIKE SQL22 知识点 字符串拼接 SQL23 知识点 时间函数格式化 SQL25 知识点 WHERE GR
  • 全排列算法(java实现)

    100题目之53题目和70题目 在做100题目的时候 全排列的算法困扰了很久 虽然网上了搜了一些资料 可是并没有搞懂 今天花了一个下午的时间 从新梳理了一遍 终于弄明白了 全排列的算法 递归分析网上都有 http www cnblogs c