java排列组合(递归算法)

一、排列

1、计算公式如下:
在这里插入图片描述
2、使用方法,例如在1,2,3,4,5中取3个数排列:
在这里插入图片描述
3、全排列
当m=n时,结果为全排列。例如1,2,3,4的全排列如下:
在这里插入图片描述4、代码实现求无重复数组的全排列

	/*** 循环递归获取给定数组元素(无重复)的全排列** @param oriList 原始数组* @param oriLen 原始数组size* @param arrayCombResult 数组排列结果集,可传null或空Set* @param preList 记录排列参数,可传null或空List* @return 排列结果*/public static Set<String> getArrange(List oriList, int oriLen, Set<String> arrayCombResult, List preList){if (oriList == null){return arrayCombResult;}if (arrayCombResult == null){arrayCombResult = new HashSet<>();}if (preList == null){preList = new ArrayList();}for (int i = 0; i < oriList.size(); i++){while(preList.size() > 0 && oriList.size() + preList.size() > oriLen){preList.remove(preList.size() - 1);}List arrList = new ArrayList(oriList);preList.add(arrList.get(i));arrList.remove(i);if (arrList.isEmpty()){arrayCombResult.add(getStrFromList(preList));}else {getArrange(arrList, oriLen, arrayCombResult, preList);}}return arrayCombResult;}

二、组合

1、计算公式如下:
在这里插入图片描述
2、使用方法,例如在1,2,3,4,5中取3个数组合:
在这里插入图片描述
3、代码实现求无重复数组的所有组合

	/*** 循环递归获取给定数组元素(无重复)的所有组合** @param oriList 原始数组* @param resultSet 元素组合结果,可传null或空set* @return 组合结果*/public static Set<String> getCombination(List oriList, Set<String> resultSet) {if (oriList == null) {return resultSet;}if (resultSet == null){resultSet = new HashSet<>();}for (int i = 0; i < oriList.size(); i++) {List copyList = new ArrayList(oriList);resultSet.add(getStrFromList(copyList));List removeIList = new ArrayList();copyList.remove(i);removeIList.addAll(copyList);getCombination(removeIList, resultSet);}return resultSet;}

三、开发应用

1、场景1:直接输出1,2,3,4的所有组成可能。
①思路:循环递归,直接打印
②代码实现(本地创建名为EffArrange的class文件后,复制粘贴可直接执行):

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/*** 数组所有排列* * @author ansel* @date 2020/5/26 1:08 PM*/
public class EffArrange {public static void main(String[] args) {String[] array = new String[] {"1", "2", "3", "4"};arrangeAll(Arrays.asList(array), "");}public static void arrangeAll(List array, String prefix){System.out.println(prefix);for (int i = 0; i < array.size(); i++) {List temp = new LinkedList(array);arrangeAll(temp, prefix + temp.remove(i));}}
}

2、场景2:列出 ”我“ ”爱“ ”编“ ”码“ 四个字所有的组成可能,并返回。
①思路:先求四个字的所有组合可能,再对每种可能全排列。
②代码实现(本地创建名为Arrange的class文件后,复制粘贴可直接执行):

import java.util.*;
/*** 对给定数组元素(无重复)进行排列** @author ansel** @date 2020/5/26 1:23 PM*/
public class Arrange {public static void main(String[] args) {String[] array = new String[] {"我", "爱", "编", "码"};List arrayList = Arrays.asList(array);Set<String> resultSet = new HashSet<>();getCombination(arrayList, resultSet);System.out.println("组合数 = " + resultSet.size());System.out.println("所有组合 : " + resultSet);Set<String> arrayCombResult = new HashSet<>();Iterator<String> iterator = resultSet.iterator();while (iterator.hasNext()){List arrList = Arrays.asList(iterator.next().split(","));getArrange(arrList, arrList.size(), arrayCombResult, null);}System.out.println("排列数 = " + arrayCombResult.size());System.out.println("所有排列 : " + arrayCombResult);}/*** 循环递归获取给定数组元素(无重复)的全排列** @param oriList 原始数组* @param oriLen 原始数组size* @param arrayCombResult 数组排列结果集,可传null或空Set* @param preList 记录排列参数,可传null或空List* @return 排列结果*/public static Set<String> getArrange(List oriList, int oriLen, Set<String> arrayCombResult, List preList){if (oriList == null){return arrayCombResult;}if (arrayCombResult == null){arrayCombResult = new HashSet<>();}if (preList == null){preList = new ArrayList();}for (int i = 0; i < oriList.size(); i++){while(preList.size() > 0 && oriList.size() + preList.size() > oriLen){preList.remove(preList.size() - 1);}List arrList = new ArrayList(oriList);preList.add(arrList.get(i));arrList.remove(i);if (arrList.isEmpty()){arrayCombResult.add(getStrFromList(preList));}else {getArrange(arrList, oriLen, arrayCombResult, preList);}}return arrayCombResult;}/*** 循环递归获取给定数组元素(无重复)的所有组合** @param oriList 原始数组* @param resultSet 元素组合结果,可传null或空set* @return 组合结果*/public static Set<String> getCombination(List oriList, Set<String> resultSet) {if (oriList == null) {return resultSet;}if (resultSet == null){resultSet = new HashSet<>();}for (int i = 0; i < oriList.size(); i++) {List copyList = new ArrayList(oriList);resultSet.add(getStrFromList(copyList));List removeIList = new ArrayList();copyList.remove(i);removeIList.addAll(copyList);getCombination(removeIList, resultSet);}return resultSet;}/*** 将数组元素转化为逗号分隔的字符串** @param oriList 原始数组* @return 字符串*/public static String getStrFromList(List oriList){StringBuffer result = new StringBuffer();if (oriList == null){return result.toString();} else {for (int i = 0; i < oriList.size(); i++){result.append(oriList.get(i));if (i != (oriList.size() - 1)){result.append(",");}}}return result.toString();}
}

—— Copyright © 2020 Ansel. All rights reserved.

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

算法中的排列与组合

排列组合公式 不含重复元素的排列组合 含有重复元素的排列组合 如果产生的组合和排列可以包含有重复的元素&#xff0c;其实这类问题在苏荷数学上是多种集的排列和组合问题。 多重集的排列问题 设S是有k种不同类型对象的多重集合&#xff0c;每个元素都有无限的重复数。那么…

排列组合 交叉组合 组合排列算法

20180619 一&#xff0c;交叉组合排列算法&#xff1a; 1、前言&#xff1a; 在项目开发的过程中负责全系统查询检索的一个模块&#xff0c;其中有一个查询方式叫做“交叉组合查询”&#xff0c;与数学中的排列组合类似&#xff0c;因此就开始想看一下这个该怎么写&#xff0c;…

程序员必备算法——排列组合

程序员必备算法——排列组合 程序员必备算法排列组合 还记得排列组合吗全排列的实现组合问题总结 还记得排列组合吗&#xff1f; 在高中的时候最常接触的莫过于排列组合了&#xff0c;毕竟高考必考的嘛。我们先来回忆下这两个的公式是啥&#xff1a; 如果看到这个还有一丢…

教你 5 分钟快速部署开源网关

最近在研究开源网关&#xff0c;找了一圈&#xff0c;发现这个叫 Apinto 的开源网关符合我的需求&#xff0c;下面我将演示如何部署这样一个开源网关。 Apinto功能架构图 开始部署 部署资源 设备推荐配置设备数量部署对象4核8G&#xff0c;250G磁盘空间&#xff0c;2.5GHz1控制…

【算法】JavaScript必会算法 —— 排列组合(全排列)

文章目录 首先理解一下排列组合的定义&#xff1a; 排列的定义&#xff1a;从 n n n个不同元素中&#xff0c;任取 m m m&#xff08; m ≤ n m≤n m≤n&#xff0c; m m m与 n n n均为自然数&#xff0c;下同&#xff09;个元素按照一定的顺序排成一列&#xff0c;叫做从 n n…

C++:排列组合算法

转载请注明出处 1 介绍 排列&#xff08;Permutation&#xff09;和组合&#xff08;Combination&#xff09;是两个基础的数学概念。 计算排列与组合可以解决一些实际的工程问题&#xff0c;掌握排列组合计算的方法是十分重要的。 目前&#xff0c;网上已经有一些计算排列…

排列组合公式及排列组合算法

排列组合公式 排列组合公式/排列组合计算公式 公式P是指排列&#xff0c;从N个元素取M个进行排列。 公式C是指组合&#xff0c;从N个元素取M个进行组合&#xff0c;不进行排列。 N-元素的总个数 M参与选择的元素个数 &#xff01;-阶乘&#xff0c;如 9&#xff01;&#xf…

排列组合公式/排列组合计算公式

排列组合公式/排列组合计算公式 公式P是指排列&#xff0c;从N个元素取M个进行排列。 公式C是指组合&#xff0c;从N个元素取M个进行组合&#xff0c;不进行排列。 N-元素的总个数 M参与选择的元素个数 &#xff01;-阶乘&#xff0c;如9&#xff01;&#xff1d;9*8*7*6*5…

详细总结组合排列的十余种算法实现

目录 •写在前面 •问题引入 •暴力枚举 循环枚举 递归枚举 回溯枚举 •深度优先搜索 前序遍历 中序遍历 后序遍历 •字典序 •二进制位运算 •带重复数字 •总结 •写在前面 排列组合的问题&#xff0c;如果没有合适的算法去解决&#xff0c;时间复杂度会相当的…

论坛的头像

做了个论坛的头像,相当的简单 也就只能看看啦 菜啊

论坛头像编辑 html,spu头像编辑.html

&#xfeff;SPU头像编辑 $axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; }; $axure.utils.getOtherPath function() { return resources/Other.html; }; $axure.utils.getReloadPath function() { return resources/reload.ht…

牛客网项目---1.7.账号设置(上传头像、修改密码)

7、账号设置/setting 上传头像将头像保存到本地/七牛云服务器&#xff0c;随机生成字符串作为图片的名称&#xff0c;表单提交再返回该界面。获取头像时&#xff0c;在本地获取&#xff0c;通过输入输出流&#xff0c;先读到缓冲区&#xff0c;再从缓冲区写出&#xff1b;在七…

Discuz论坛无法上传头像/ 企业邮箱被归为垃圾邮件的问题

背景&#xff1a; 安装了Discuz论坛程序&#xff0c;更改个人头像的时候&#xff0c;点击上传按钮没有反应基于阿里云企业邮箱配置了论坛的邮件发送服务&#xff0c;但是邮箱被列入垃圾邮件拒收 解决方法&#xff1a; 上传头像失败&#xff1a;ucenter和全局域名要加https&a…

flask更改用户头像

目录结构图: 配置app 导包及配置 import os from flask import Flask, flash, request, redirect, url_for,Request,render_template from werkzeug.utils import secure_filenameUPLOAD_FOLDER 文件下载的绝对路径 # 允许的下载类型 ALLOWED_EXTENSIONS {txt, pdf, png, j…

discuz论坛用户--设置--修改头像不显示的解决方法

本文参考&#xff1a;https://www.2cto.com/kf/201601/478810.html 和https://jingyan.baidu.com/article/ceb9fb10ab73b68cad2ba092.html 先登陆discuz管理员后台admin.php&#xff0c;找到“站长”>>“UCenter设置”&#xff0c;其它的默认的地方就不要动了。关键要改…

关于Discuz 出现上传头像失败的问题

今天测试了论坛上传头像时出现 网上大部分的解决方案是配置UCenter Access denied for agent changed 头像无法更新 配置文件&#xff1a; config下config_global.php&#xff0c;config_ucenter.php uc_server\data下的config.inc.php 具体可参考此处&#xff1a;Discuz配…

内部论坛系统

开发环境/技术&#xff1a; Linux&#xff0c;MyEclipse&#xff0c;JDK1.7&#xff0c;MySql&#xff0c;JS&#xff0c;jQuery&#xff0c; ajax&#xff0c;Tomcat&#xff0c;CSS样式&#xff0c;Struts框架等 项目描述/功能&#xff1a; 项目主要实现了用户登陆注册&#…

Vue 彩色头像|一个有趣的头像生成器 附源码

前言 这是一款矢量风格的头像生成器&#xff0c;您可以搭配不同的素材组件&#xff0c;生成属于您自己的个性化头像。 介绍 您可能感兴趣的功能&#xff1a; 可视化组件配置栏随机生成头像重做/撤消国际化批量生成多个头像 在线体验 Vue 彩色头像https://www.shserve.cn/…

PHP 头像上传到mysql数据库

准备环境 window2008 phpStudy Mysql数据库 mysql数据库 第一步&#xff1a;用户登录成功 该用户已经存在数据库 进入个人中心&#xff0c;查找到数据库中的个人信息 进行图片上次 <?php include "../mysqlcon/dblink.php"; //导入数据库 ?><html> …

用php做论坛头像代码,详细介绍PHP针对多用户实现头像更换代码示例

一个网站&#xff0c;其实说白了就是某几个特定功能的组合&#xff0c;而更换用户头像就在这些功能之中。今天就来做个测试&#xff0c;针对不同的用户&#xff0c;实现头像上传功能。 成品图 思路针对不同的用户上传头像&#xff0c;我们要为每一个已登录的用户创建一个文件夹…