给定N个不同的字符,将这些字符全排列

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 06:51   11   0


/**
* 给定N个不同的字符,将这些字符全排列,最终的结果将会是N!中。
* 如给定A,B,C三个不同的字符,则结果为ABC,ACB,BAC,BCA,CAB,CBA
* @author acer
*/

package pac01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class AllPermutation {
 
 public static void main(String [] args) throws IOException {
  char ch[] = {'A','B','C','D'};
  int t = 1;
  for(int i=1;i<=ch.length;) {
   t *= i++;
  }
  System.out.println("共有"+t+"种组合方式");
  char result[] = new char[ch.length];
  AllPermutation.show(0,ch,result);
 }
 
 /**
  * 传递参数
  * @param ch 字符数组
  * @param length  字符数组的长度
  */
 public static void show(int t,char[] ch,char[]result){
  
  //如果只有一个字符
  if(ch.length == 1) {
   result[t] = ch[0];
   System.out.println(result);
   return;
  }
  
  //如果有多个字符
  for(int i=0;i<result.length-t;i++) {
   result[t] = ch[i];
   char []newSource = getNewSource(ch,ch[i]);
   show(t+1,newSource,result);
  }
 }
 
 public static char[] getNewSource(char[] source,char c) {
  char[] newSource = new char[source.length-1];
  for(int i=0,j=0;i<source.length;i++) {
   if(source[i] != c) {
    newSource[j] = source[i];
    j++;
   }
  }
  return newSource;
 }
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP