程序算术题-2

程序算术题-2

  • 输出所有组合
    • 逻辑
    • 实例
    • 代码
  • 输出所有排列
    • 逻辑
    • 实例
    • 代码

输出所有组合

计算一组数字按n位数组合的所有组合。

逻辑

    /*** @param stringBuilder 用于组合的拼接* @param list          组合数序列* @param level         目前位数* @param exceptedLevel 组合期待位数*/

为了去匹配更多的组合计算题目,方法没有去固定多少位数的组合,可以自由填入指定。参数exceptedLevel代表组合的位数,参数level代表现在组合拼接达到的位数。方法也是开放自由输入用于组合的数字,并且通过Arrays封装成List序列,用于后面的方法取值。方法执行数字合成组合的操作是通过StringBuilder完成组合的拼接,并最终输出。

// 过滤重复的数字
Arrays.stream(args).distinct().collect(Collectors.toList())

由于组合是不存在重复数字,这里会使用Arrays.stream(args).distinct()方法对输入数字序列进行重复数字的过滤,最后用collect方法把数组转化成数字序列。方便后面的方法操作。

    public static void combine(StringBuilder stringBuilder, List<String> list, int level, int exceptedLevel) {for (int i = 0; i < list.size(); i++) {StringBuilder builder = stringBuilder != null ? new StringBuilder(stringBuilder) : new StringBuilder();builder.replace(level - 1, level, list.get(i));if (level == exceptedLevel) {System.out.println(builder);continue;}ArrayList<String> arrayList = new ArrayList<>(list);arrayList.remove(i);combine(builder, arrayList, level + 1, exceptedLevel);}}

这里采用了递归的方式去逐个位数拼接,当目前位数达到所期待的组合位数level == exceptedLevel会进行单个组合的递归结束操作,这个组合会不再递归拼接,方法将组合输出,这样子就完成了一个组合的拼接,然后continue,继续开始下一个组合的拼接。
组合没有重复的数字,方法调用了序列的remove方法将已经进入组合的数字移除,避免出现数字的重复,并且为每一个组合创建一个源数字序列List list的副本,避免各个组合间所需拼接的数字源因为源数字序列remove导致的缺失。

实例

有无序的4,2,3,1,1个五个数字,去组成互不相同且无重复数字的三位数组合,都是多少?
输入需要被组合的数字

    /*** 互不相同,无重复数字的排列* arg[0...(n-1)] 可用于排列的数* arg[n] 排列数的位数*/public static void main(String[] args) {combine(null, Arrays.asList(args), 1, 3);}

结果如下

423
421
432
431
412
413
243
241
234
231
214
213
342
341
324
321
314
312
142
143
124
123
134
132

代码

查看组合计算题的代码

输出所有排列

计算一组数字按n位数排列的所有排列。

逻辑

    /*** @param stringBuilder 用于排列的拼接* @param list          排列数序列* @param level         目前位数* @param exceptedLevel 排列期待位数*/

为了去匹配更多的排列计算题目,方法没有去固定多少位数的排列,可以自由填入指定。参数exceptedLevel代表排列的位数,参数level代表现在排列拼接达到的位数。方法也是开放自由输入用于排列的数字,并且通过Arrays封装成List序列,用于后面的方法取值。方法执行数字合成排列的操作是通过StringBuilder完成排列的拼接,并最终输出。

		// 过滤重复数字List<String> list = Arrays.stream(args).distinct().collect(Collectors.toList());// 排序list.sort(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {Integer s1 = Integer.valueOf(o1);Integer s2 = Integer.valueOf(o2);return s1 < s2 ? -1 : s1 == s2 ? 0 : 1;}});arrange(null, list, 1, 3);

由于排列是有序的,并且不存在重复数字,这里同样使用了Arrays.stream(args).distinct()方法对输入数字序列进行重复数字的过滤,以及用collect方法把数组转化成数字序列,然后再调用list.sort方法对序列进行排序,有序的序列更方便于后面的合成排列操作,它不需要重复为合成的排列进行排序操作,合成的时候已经是一个有序的排列。

    public static void arrange(StringBuilder stringBuilder, List<String> list, int level, int exceptedLevel) {for (int i = 0; i < list.size(); i++) {StringBuilder builder = stringBuilder != null ? new StringBuilder(stringBuilder) : new StringBuilder();builder.replace(level - 1, level, list.get(i));if (level == exceptedLevel) {System.out.println(builder);continue;}arrange(builder, list.subList(i + 1, list.size()), level + 1, exceptedLevel);}}

这里同样是采用了递归的方式去逐个位数拼接,当目前位数达到所期待的排列位数level == exceptedLevel会进行单个排列的递归结束操作,这个排列会不再递归拼接,方法将排列输出,这样子就完成了一个排列的拼接,然后continue,继续开始下一个排列的拼接。
排列没有重复的数字,并且有排序,由于传入的List list已经是一个有序序列,这里可以通过传入排除了已入排列的数字的子序列list.subList(i + 1, list.size())来避免出现数字的重复,并且subList方法会生成一个新的序列,不影响到源数据序列,这样子就避免了各个排列间数字源的缺失。

实例

有无序的4,2,3,1,1个五个数字,去组成互不相同且无重复数字的三位数排列,都是多少?
输入需要被排序的数字

    /*** 互不相同,无重复数字的组合* arg[0...(n-1)] 可用于组合的数* arg[n] 组合数的位数*/public static void main(String[] args) {arrange(null, new ArrayList<String>(Arrays.asList(args)), 1, 3);}

结果如下

123
124
134
234

代码

查看排列计算题的代码

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

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

相关文章

MAC M3电脑在idea上搭建Spark环境并跑通第一个程序

我的电脑是Macbook Pro&#xff0c;最近在学习Spark&#xff0c;想要在idea里搭建Spark环境&#xff0c;为之后的Spark编程作准备。下面是在MAC版本的idea里配置Spark环境。 1. 准备工作 1.安装 JDK 确保Mac 上已经安装了 JDK 8 或更高版本。 可通过 java -version 查看是否…

欧科云链研究院:AI时代,如何证明“我是我”?

OKG Research&#xff5c;编辑 近日&#xff0c;OpenAI 发布了新模型 Sora。这是一款高性能的文本到多模态生成工具&#xff0c;支持从文本生成精细的图像和动态视频。 相较早先发布的视频样例&#xff0c;该功能目前已经可以由用户真实上手体验&#xff0c;目前由于服务过载…

任务5 Web服务配置与管理

Web服务概述 Web服务简介 当今人们获取和传播信息的主要方式之一。 Web服务提供的资源多种多样&#xff0c;可能是简单的文本&#xff0c;也可能是图片、音频和视频等多媒体数据。 常用的浏览器有Chrome、Internet Explorer&#xff0c;以及Firefox等。 手机等移动设备成为…

Opencv之图像添加水印

一、实验原理 在图片处理领域&#xff0c;添加水印是一种常见的操作。通过叠加图像的方式&#xff0c;可以将水印无缝嵌入目标图像的指定位置。其基本原理包括以下步骤&#xff1a; 1、模板输入&#xff08;掩膜生成&#xff09;&#xff1a; 将水印图片转换为灰度图&#xf…

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念&#xff0c;并解决一个经典问题&#xff1a;斐波那契数列。学生将学习如何使用动态规划优化递归计算&#xff0c;并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分&#xff0c;尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源&#xff1a;完全免费且开源&…

HTML和JavaScript实现商品购物系统

下面是一个更全面的商品购物系统示例&#xff0c;包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明&#xff1a; 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…

将带注释的Word文档改造成点击注释引用即可弹窗显示注释的HTML文档

阅读中国古籍电子书的时候&#xff0c;往往有很多注释。在正文和注释之间来回滚动页面是一件挺麻烦的事&#xff0c;比较方便的做法是将它编辑成通过点击注释引用即将注释弹出显示在引用所在位置的HTML文档&#xff0c;然后利用HTML文档制作成PDF或者epub文件&#xff0c;就比较…

Harmony Next开发通过bindSheet绑定半模态窗口

示例概述 Harmony Next开发通过bindSheet绑定半模态窗口 知识点 半模态窗口父子组件传值 组件 LoginComponent Component struct LoginComponent {// Prop 父子单项绑定值Prop message:string // Link 父子双向绑定值Link userName:stringLink password:stringLink isSh…

codeforces一些题目思路复盘

codeforces round 919 dv2 C Partitioning the Array 大致题意&#xff0c;对于n约数i&#xff0c;我们把原数组分成份&#xff0c;并且每份中有i个元素&#xff0c;对于每个分组情况&#xff0c;如果存在一个数m使得数组中元素modm后使得每个部分的数组完全相同&#xff0c;如…

ElasticSearch 简介

一、什么是 ElastcSearch&#xff1f; ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库&#xff0c;ES 中的索引是存储数据的地方&#xff0c;包含了一堆有相似结构的文档数据…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片&#xff0c;无法预览&#xff0c;提示&#xff1a; Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法&#xff1a; 点击左边这个刷新下即可

测试工程师的职业规划

测试人员在管理上的发展 基层测试管理者&#xff1a;测试组长 工作内容&#xff1a;安排小组工作&#xff0c;提升小组成员测试能力&#xff0c;负责重要的测试工作。 负责对象&#xff1a;版本&#xff0c;项目 中层测试管理者&#xff1a;测试经理 负责对象&#xff1…

Linux系统下多任务管理器:screen使用指南

文章目录 安装快速入门启动Screen会话创建和管理窗口退出和恢复会话 高级功能多用户支持日志记录复制粘贴模式自定义配置 在Linux和类Unix系统的世界里&#xff0c;命令行是用于与系统交互的主要方式之一。然而&#xff0c;当涉及到远程服务器管理、长时间运行的任务或者同时处…

C缺陷与陷阱 — 8 编译与链接

目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…

Harmony Next开发Navigation页面跳转

概述 Harmony Next开发Navigation页面跳转 知识点 Navigation通过NavPathStack路由跳转Navigation以弹窗的方式打开NavDestination页面Menu配置 组件 NavTest Entry Component struct NavTest {Provide pageInfos: NavPathStack new NavPathStack()Builder PageMap(name…

大模型系列4--开源大模型本地部署到微调(WIP)

背景 一直想真正了解大模型对硬件资源的需求&#xff0c;于是准备详细看一篇视频&#xff0c;将核心要点总结记录下。本文内容参考视频&#xff1a;保姆级教程&#xff1a;6小时掌握开源大模型本地部署到微调&#xff0c;感谢up主 训练成本 训练 > 微调 > 推理训练GPT…

仿《公主连结》首页场景的制作(附资源包)

先看效果&#xff08;主要实现点击按钮切换图片&#xff0c;未解锁按钮弹出提示&#xff0c;点击过后播放动画&#xff09; 预备知识&#xff08;单例模式&#xff0c;携程&#xff0c; Resources.Load加载资源的方式&#xff09; 资源准备&#xff08;底部按钮7个图标&#x…

Redis - 集合 Set 及代码实战

Set 类型 定义&#xff1a;类似 Java 中的 HashSet 类&#xff0c;key 是 set 的名字&#xff0c;value 是集合中的值特点 无序元素唯一查找速度快支持交集、并集、补集功能 常见命令 命令功能SADD key member …添加元素SREM key member …删除元素SCARD key获取元素个数SI…

基于Llamaindex的网页内容爬取实战

目的 本文不关注如何解析网页 html 元素和各种 python 爬虫技术&#xff0c;仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者&#xff0c;使用它是为了后续的存查一体化。 安装依赖 pip install llama-index-readers-web # pip install llam…