程序算术题-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.rhkb.cn/news/490534.html

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

相关文章

VQ-VAE和VAE 的区别是什么?

第一行所展示的就是普通的VAE,它的核心是通过encoder和decoder&#xff0c;将像素空间的图像压缩到一个提取了核心特征的隐变量向量。VQ-VAE的思想是&#xff0c;即使VAE中压缩的这个隐变量中的向量提取了图片中的核心特征信息&#xff0c;但是这些信息仍然可能存在冗余&#x…

使用Qt Creator设计可视化窗体(一)

一、创建项目 打开 Qt Creator &#xff0c;在菜单栏中选中&#xff1a; “文件” --------> “新建文件或项目” &#xff1b;或者使用快捷键&#xff1a;Ctrl n&#xff1b;或者直接点击&#xff1a;“new” Qt 中的构建工具有三种可供选择&#xff0c;分别是&#…

Python3 爬虫 Scrapy 与 Redis

Scrapy是一个分布式爬虫的框架&#xff0c;如果把它像普通的爬虫一样单机运行&#xff0c;它的优势将不会被体现出来。因此&#xff0c;要让Scrapy往分布式爬虫方向发展&#xff0c;就需要学习Scrapy与Redis的结合使用。Redis在Scrapy的爬虫中作为一个队列存在。 一、Scrapy_r…

Docker 学习

Docker 学习 Docker 概念 Docker 安装 一般是在服务器里 Docker阿里云镜像加速 配置主要是Linux命令 Docker命令大纲及帮助文档的使用 docker帮助文档 查看docker命令 docker --help查看某个命令&#xff0c;例如ps的详细文档 docker ps --help也可查阅 [docker官方帮助手…

超牛免费 机械臂模型、工业机器人模型下载网站集合

‌机械臂是一种高精度、多输入多输出的复杂系统&#xff0c;能够模仿人手的动作&#xff0c;按照给定程序、轨迹和要求实现自动抓取、搬运等功能‌。它通常由执行机构、驱动装置、控制系统以及传感器等组成&#xff0c;能够完成各种复杂的动作。‌ 机械臂在工业、医学、娱乐、…

【Python技术】同花顺wencai涨停分析基础上增加连板分析

周末&#xff0c;有读者加我&#xff0c; 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码&#xff1a; import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…

小程序子组件调用父组件方法、父组件调用子组件方法

1、子组件调用父组件方法 子组件this.triggerEvent(finish); startShare(e) {let url config.apiUrl "/business/lzShare/edit";let data this.data.currentData;util.httpPut(url, data).then((res) > {this.triggerEvent(finish);console.log(res.result);})…

怎样使用Eclipse创建Maven的Java WEB 项目

文章目录 1、第一种方式&#xff08;选择 archetype 方式&#xff09; 1.1、第一步&#xff1a;创建项目1.2、第二步&#xff1a;配置jre1.3、第三步&#xff1a;配置tomcat1.4、第四步&#xff1a;设置为WEB3.11.5、第五步&#xff1a;配置Maven的编译级别 1.5.1、第一种方法…

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…

C语言动态内存管理【进阶--5--】

文章目录 [toc] 动态内存管理一、作用即意义二、动态内存函数的介绍Ⅰ、malloc()函数、free()函数Ⅱ、calloc()函数Ⅲ、realloc()函数 三、常见的动态内存错误Ⅰ、对NULL指针的解引用操作Ⅱ、对动态开辟空间的越界访问Ⅲ、对非动态开辟的内存使用free释放Ⅳ、使用free释放动态开…

Python学习(三)—— 基础语法(下)

目录 一&#xff0c;函数 二&#xff0c;列表和元组 2.1 列表基础操作 2.2 切片 2.3 列表的增删查改 2.4 连接链表 2.5 元组 三&#xff0c;字典 3.1 关于字典 3.2 字典的增删查改操作 3.3 遍历字典元素 3.4 合法的key类型 四&#xff0c;文件操作 4.1 打开关闭…

【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)

POI是Point of Interest的简称&#xff0c;意为“兴趣点”&#xff0c;是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点&#xff0c;例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现&#xff0c;并附带详细属性信息&#x…

执行python时报错SyntaxError: Non-UTF-8 code

执行python时报错SyntaxError: Non-UTF-8 code starting with ‘\xb4’ in file sqlite_insert.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 通过对文件增加编码格式进行解决。 codingutf-8 codingutf-8 import sqlite…

三、前端学习——HTML表格创建与编辑

1 先看一段代码 css代码如下所示&#xff1a; /* 定义表格整体的宽度、边框样式和间距 */ table {width: 100%; /* 设置表格占据100%宽度 */border-collapse: collapse; /* 合并表格边框 */margin-top: 30px; /* 设置表格与上方元素的间距 */ }/* 定…

电子应用设计方案-52:智能电子相框系统方案设计

智能电子相框系统方案设计 一、引言 智能电子相框作为一种能够展示数字照片和多媒体内容的设备&#xff0c;为用户提供了便捷、个性化的照片展示方式。本方案旨在设计一款功能丰富、用户体验良好的智能电子相框系统。 二、系统概述 1. 系统目标 - 高质量显示照片和视频&#…

tomcat优化和动静分离

tomcat的优化和动静分离 tomcat的优化&#xff1a; 默认的安装情况下&#xff0c;tomcat经常会假死的情况 tomcat需要进行优化 优化的三个方面&#xff1a; 1、tomcat的配置优化2、操作系统的内核优化3、jvm调优 tomcat自身的优化&#xff1a; 8080&#xff1a;tomcat对外提供…

360quake导出工具

360Quake 查询工具 一个基于 PyQt6 开发的 360 Quake 网络空间测绘引擎查询工具&#xff0c;提供了简单直观的图形界面&#xff0c;支持多种数据导出格式。 功能特点 现代化的图形用户界面支持大规模数据查询&#xff08;最多100,000条结果&#xff09;实时查询进度显示多种…

东方通TongWeb替换Tomcat的踩坑记录

一、背景 由于信创需要&#xff0c;原来项目的用到的一些中间件、软件都要逐步替换为国产品牌&#xff0c;决定先从web容器入手&#xff0c;将Tomcat替换掉。在网上搜了一些资料&#xff0c;结合项目当前情况&#xff0c;考虑在金蝶AAS和东方通TongWeb里面选择&#xff0c;后又…

UE5中实现Billboard公告板渲染

公告板&#xff08;Billboard&#xff09;通常指永远面向摄像机的面片&#xff0c;游戏中许多技术都基于公告板&#xff0c;例如提示拾取图标、敌人血槽信息等&#xff0c;本文将使用UE5和材质节点制作一个公告板。 Gif效果&#xff1a; 网格效果&#xff1a; 1.思路 通过…

Cisco Packet Tarcer配置计网实验笔记

文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…