`
1202
  • 浏览: 2068 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

预览文章: 算法备忘录----对数组全排列

阅读更多
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();
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics