public class ArrayPermutation {
public static void main(String[] args) {
char[] str = {'a','b','c','d'};
dopa(str,str.length);
}
/*
* 对数组a的第0到第n-1项进行全排列
*/
public static void dopa(char[]a,int n){
if(n==1){//如果n为1,则无需再进行全排列,此时应该输出数组了
printArray(a);//打印数组
//return;
}else{
for(int i=0;i<n;i++){//
dopa(a,n-1);//对数组a的第0到第n-2项进行全排列
// if(n==2){
// printArray(a);
// }
rotate(a,n);//轮换数组的第n-1项
}
}
}
/**
* 轮换数组的第n-1项,为确保数组下次能够正确轮换,需要将数组第0到第n-2项均右移一位,
* 然后将第n-1项放到第0位
* @param a
* @param n
*/
private static void rotate(char[] a, int n) {
char temp = a[n-1];
for(int i=n-1;i>0;i--){
a[i]=a[i-1];
}
a[0] = temp;
}
/**
* 打印数组
* @param a
*/
public static void printArray(char[]a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]);
}
System.out.println();
}
}
分享到:
相关推荐
智能优化算法:Dynamic-Hunting-Leadership-optimization Matlab
自己写的 呵呵 希望支持 信息安全 古典加密算法------置换密码 古典加密算法------代换密码------乘数密码
代码及数据集:KNN分类算法--手写数字识别任务
计算模型与算法技术:4-Divide-and-Conquer.ppt
计算模型与算法技术:5-Decrease-and-Conquer.ppt
计算模型与算法技术:6-Transform-and-Conquer.ppt
*1.--------紫色线条:DDA算法--------- *2.--------红色线条:逐点比较算法--------- *3.--------绿色线条:Bresenham算法--------- 【在压缩包里附有 .exe 文件,可直接双击运行,看结果。工程中需要导入winbgi....
Algorithms:算法---第四版
资料汇总:数学建模常用算法----微分方程.zip
资料汇总:数学建模常用算法----遗传算法.zip
资料汇总:数学建模常用算法----蒙特卡罗算法.zip
资料汇总:数学建模常用算法----蚁群算法.zip
资料汇总:数学建模常用算法----预测方法.zip
资料汇总:数学建模常用算法----模拟退火.zip
资料汇总:数学建模常用算法----对策论.zip
资料汇总:数学建模常用算法----灰色模型.zip