程序算术题-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,一经查实,立即删除!

相关文章

第十四章:IO流 (java.io包中)

一、理解 1. 简单而言&#xff1a;流就是内存与存储设备之间传输数据的通道、管道。 2. 分类&#xff1a; (1) 按方向(以JVM虚拟机为参照物)【重点】 输入流&#xff1a;将<存储设备>中的内容读入到<内存>中。 输出流&#xff1a;将<内存>中的内容写入到…

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

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

Linux 安装NFS共享文件夹

程序默认使用2049端口&#xff0c;如果被占用需要修改端口104设置为服务端 122设置为客户端 一、在线安装&#xff08;服务端和客户端执行&#xff09; yum install nfs-utils rpcbind -y二、配置启动参数&#xff08;服务端执行&#xff09; 104服务器/mnt路径下创建shareda…

Maven常用插件清单

Maven 是一个强大的项目管理和构建工具&#xff0c;它使用插件来执行各种构建生命周期任务。以下是常用的一些 Maven 构建插件及其主要用途&#xff1a; 1. Maven Compiler Plugin 用途&#xff1a;编译Java源代码。配置示例&#xff1a;<build><plugins><plu…

大模型呼出机器人详解

大模型呼出机器人详解 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人是基于大规模深度学习模型构建的智能化客服系统&#xff0c;它能够处理海量数据并学习其中的规律&#xff0c;从而实现高…

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

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

React 进阶深入理解核心概念与高阶实践

在上一节中&#xff0c;我们学习了 React 的基础知识&#xff0c;包括组件、状态管理和基本操作。接下来&#xff0c;我们将进一步探索 React 的高级功能和实战技巧&#xff0c;例如 组件间通信、高阶组件、Context API、React Router 等。这些内容将帮助你构建更复杂、功能更丰…

3.python运算符

Python 提供了多种运算符&#xff0c;用于执行算术、比较、逻辑等各种操作。以下是 Python 中常见的运算符类型及其用法&#xff1a; 文章目录 1. 算术运算符2. 比较运算符3. 逻辑运算符4. 赋值运算符5. 位运算符6. 成员运算符7. 身份运算符8. 运算符优先级 1. 算术运算符 算…

任务5 Web服务配置与管理

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

Opencv之图像添加水印

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

nodejs保存echarts图片

canvas和napi-rs/canvas 可以用于在服务器端处理canvas图形,使用一个即可。 canvas安装方法&#xff1a;https://github.com/Automattic/node-canvas/wiki/Installation:-Windows napi-rs/canvas&#xff0c;底层使用rust构建可以直接 npm安装。 npm i napi-rs/canvas 示例、…

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

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

Thread线程基础使用

多线程目的&#xff1a;其实就是希望“并行”执行多任务&#xff0c;提升效率。 单核多线程基于时间片轮询 并发而非并行 线程最大数等于cpu核心数为佳 namespace thinger.ThreadDemo {class Program{//主线程static void Main(string[] args){Console.WriteLine("这个…

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

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

HTML和JavaScript实现商品购物系统

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

[python SQLAlchemy数据库操作入门]-10.性能优化:提升 SQLAlchemy 在股票数据处理中的速度

哈喽,大家好,我是木头左! 当处理大量数据时,如股票数据,默认的ORM操作可能会显得效率低下。本文将探讨如何通过一些技巧和策略来优化SQLAlchemy ORM的性能,从而提升其在股票数据处理中的速度。 1. 选择合适的数据类型 在定义模型时,选择合适的数据类型对于性能至关重要…

【深入理解ApacheTomcat】

深入理解ApacheTomcat 简介 Apache Tomcat 是一个开源的Java Servlet容器&#xff0c;由Apache软件基金会开发。它实现了Java EE&#xff08;企业版&#xff09;的Servlet和JSP&#xff08;JavaServer Pages&#xff09;规范&#xff0c;并提供了对HTTP请求的处理能力。Tomca…

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

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

C 语言动态爱心代码

C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …

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

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