【Java/算法/排列】ABCDE五人排一排,如果AB必相邻且B在A的右边,那么不同的排法有几种?
【数学解法】
AB捆绑,内部不再排序,与CDE全排,得A44=24种排法。
【代码解法】
Fiveman类:
package test230425; import java.util.List; import arrange.Arranger; /** * ABCDE五人排一排,如果AB必相邻且B在A的右边,那么不同的排法有几种?列举出这些排法。 */ public class Fiveman { public static void main(String[] args) { final String[] names = { "AB", "C", "D", "E" }; final int[] arr = { 0, 1, 2, 3 }; Arranger arranger = new Arranger(arr); int idx = 0; for (List<Integer> res : arranger.getResults()) { String name = ""; for (int i = 0; i < names.length; i++) { name += names[res.get(i)]; } System.out.println(String.format("%02d", ++idx) + "." + name); } } }
Arranger类:
package arrange; import java.util.ArrayList; import java.util.List; /** * 用于产生数组全排列结果的工具类 * @since 2023/4/21 */ public class Arranger { // 保存在内部的原始元素数组的引用 private int[] rawArr; // 返回结果 private List<List<Integer>> results; /** * 构造函数 * * @param raws 原始元素数组 */ public Arranger(int[] raws) { rawArr = raws; results = new ArrayList<>(); doArrange(new ArrayList<>()); } /** * 使用递归进行全排列,结果放在results中 * * @param initialList 初始链表 */ private void doArrange(List<Integer> initialList) { List<Integer> innerList = new ArrayList<>(initialList); if (rawArr.length == initialList.size()) { results.add(innerList); } for (int i = 0; i < rawArr.length; i++) { if (innerList.contains(rawArr[i])) { continue; } innerList.add(rawArr[i]); doArrange(innerList); innerList.remove(innerList.size() - 1); } } /** * 获得结果链表的引用 * * @return */ public List<List<Integer>> getResults() { return results; } // 测试 public static void main(String[] args) { int[] numbers = { 1, 2, 3,4,5}; Arranger arranger = new Arranger(numbers); int idx = 0; for (List<Integer> re : arranger.getResults()) { System.out.println(String.format("%02d", ++idx) + "." + re); } } }
【排序结果】
01.ABCDE 02.ABCED 03.ABDCE 04.ABDEC 05.ABECD 06.ABEDC 07.CABDE 08.CABED 09.CDABE 10.CDEAB 11.CEABD 12.CEDAB 13.DABCE 14.DABEC 15.DCABE 16.DCEAB 17.DEABC 18.DECAB 19.EABCD 20.EABDC 21.ECABD 22.ECDAB 23.EDABC 24.EDCAB
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2022-04-25 SpringBoot中控制器如何接纳前台传来的含列表数据
2020-04-25 ElasticsSearch初装 环境Win10
2019-04-25 【高中数学/基本不等式】已知:x>0,y>-1,且x+y=1 求:(x^2+3)/x+y^2/(y+1)的最小值为?
2018-04-25 【高中数学/极值/基本不等式】已知正数a,b满足a+4b+2ab=6,则a+4b的最小值为?
2018-04-25 【Nodejs】cheerio简单示例
2018-04-25 【Nodejs】nimble或async并不能保证程序串行执行,回调是回避不了的坑
2015-04-25 安全驾驶技巧