說明
將一組數字、字母或符號進行排列,以得到不同的組合順序,例如1 2 3這三個數的排列組合有:1 2 3、1 3 2、2 1 3、2 3 1、3 1 2、3 2 1。
解法
可以使用遞迴將問題切割為較小的單元進行排列組合,例如1 2 3 4的排列可以分為1 [2 3 4]、2 [1 3 4]、3 [1 2 4]、4 [1 2 3]進行排列,這邊利用旋轉法,先將旋轉間隔設為0,將最右邊的數字旋轉至最左邊,並逐步增加旋轉的間隔,例如:
1 2 3 4 -> 旋轉1 -> 繼續將右邊2 3 4進行遞迴處理
2 1 3 4 -> 旋轉1 2 變為 2 1-> 繼續將右邊1 3 4進行遞迴處理
3 1 2 4 -> 旋轉1 2 3變為 3 1 2 -> 繼續將右邊1 2 4進行遞迴處理
4 1 2 3 -> 旋轉1 2 3 4變為4 1 2 3 -> 繼續將右邊1 2 3進行遞迴處理
public class Permutation {
public static void perm(int[] num, int i) {
if(i < num.length - 1) {
for(int j = i; j < num.length; j++) {
int tmp = num[j];
// 旋轉該區段最右邊數字至最左邊
for(int k = j; k > i; k--)
num[k] = num[k-1];
num[i] = tmp;
perm(num, i+1);
// 還原
for(int k = i; k < j; k++)
num[k] = num[k+1];
num[j] = tmp;
}
}
else { // 顯示此次排列
for(int j = 1; j < num.length; j++)
System.out.print(num[j] + " ");
System.out.println();
}
}
public static void main(String[] args) {
int[] num = new int[4+1];
for(int i = 1; i < num.length; i++)
num[i] = i;
perm(num, 1);
}
}
分享到:
相关推荐
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
该文档对排列组合问题的算法设计问题进行一系列讲述
PHP实现多种类型的排列组合算法,PHP多种方式实现排列组合算法。非常有用,欢迎下载。
qt c++ 排列组合 实现 没分的联系本人索要
排列组合生成器,支持筛选,存储采用h2数据库,后台采用springboot框架
excel VBA - 排列组合生成算法 - ,可快速生成指定项目的所有排列组合
tata_bear原创了排列组合小工具,只要您输入最贴切的关键词,排列组合的工作就交给这个小工具吧,用时不到1秒钟,它会把所有的排列组合结果都呈现给您。而且界面的提示信息非常的清楚友好啊! 有了这个软件,组合...
排列组合 排列 组合 java排列组合算法 排列组合算法
开通淘宝直通车的店家...tata_bear原创了排列组合小工具,只要您输入最贴切的关键词,排列组合的工作就交给这个小工具吧,用时不到1秒钟,它会把所有的排列组合结果都呈现给您。而且界面的提示信息非常的清楚友好啊!
计算数字排列组合,可以组合出任意数字的组合
排列组合计算器是一个方便计算排列组合的小工具,解压缩得到exe文件后,直接运行 排列组合计算方法 排列(Pnm(n为下标,m为上标)) 数n的阶乘:n!=n(n-1)(n-2)...2×1 Pnm=n×(n-1)....(n-m 1);Pnm=n!/(n-m...
从n个数组中取出所有排列组合(Java实现)
易语言数字排列组合源码,算出了1到5的所有排列,读者有兴趣可以研究或者自行改进!
小小wintc程序 计算排列组合代吗 用递归写的 呵呵
vb写的排列组合相关小程序,实现从n个数中列举出那几个相加能够得到指定结果的所有情况,用递归实现的,效率差强人意,赚点分先。。。
数字排列组合是个经典的算法问题,它很通俗易懂,适合不懂业务的人学习,我们通过它来发现和运用并行计算的优势,可以得到一个很直观的体会,并留下深刻的印象。问题如下: 请写一个程序,输入M,然后打印出M个...
排列组合公式排列组合计算公式[规整].pdf
小学数学三年级下册中的数学广角——简单的排列组合的教学课件。从学生感兴趣的小活动开始,引起学生的学习兴趣,用他们学过的知识一步一步进入本次教学的重点——有规律的不遗漏的列出所有的排列可能。
很多企业性格测试 包含排列组合和逻辑推理题,提前预备有助于测试中较好的发挥