| 黑马有一个基础测试题  和这个题目类似 
 楼主你看看,参考一下。
 
 
 /**
 * 第7题  编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符。
 * 例如:原始字符串是"abc",打印得到下列所有组合情况:
 *"a" "b" "c"
 *"ab" "bc" "ca" "ba" "cb" "ac"
 *"abc" "acb" "bac" "bca" "cab" "cba"
 * @author Administrator
 */
 /**
 * 思路是 先求字符串的所有组合情况,再把每一种的组合情况的所有排列情况求出
 */
 public class Test7 {
 
 public static ArrayList<char[]> list =new ArrayList<char[]>();//保存字符串的所有组合情况
 public static ArrayList<String> list2 = new ArrayList<String>();//保存字符串的全字符组合
 public static void main(String[] args) {
 String str = "abc";
 Stack<Character> s = new Stack<Character>();
 selectChar(str.toCharArray(),0,str.length(),s);
 for(int i = 0;i<list.size();i++){
 char[] c = list.get(i);
 permutation(c,0,c.length - 1);
 }
 for(int j = 0;j<list2.size();j++){
 System.out.println(list2.get(j));
 }
 }
 /**
 * 获得字符串 str 的全部组合情况
 * 例如 "abc"  ---> "abc" "ab"  "a"  "ac"  "bc" "b" "c"
 * 并把全部组合情况保存到 ArrayList list中
 * @param str
 * @param begin
 * @param m
 * @param select
 */
 public static void selectChar(char[] str,int begin,int m,Stack<Character>select){
 if(m == 0){
 Object[] Ochars = select.toArray();
 char []chars = new char[Ochars.length];
 for(int i = 0;i < Ochars.length;i++){
 chars[i] = (Character)Ochars[i];
 }
 list.add(chars);
 return;
 }
 select.push(str[begin]);
 selectChar(str,begin + 1,m - 1,select);
 select.pop();
 selectChar(str,begin + 1  ,m - 1,select);
 }
 public static void swap(char[]str,int i,int j){
 char temp = str[i];
 str[i] = str[j];
 str[j] = temp;
 }
 /**
 * 求一个字符串的所有排列情况
 * @param str
 * @param begin
 * @param end
 */
 public static void permutation(char[] str,int begin,int end){
 if(begin == end){
 list2.add(new String(str));
 return;
 }
 for(int j=begin;j<=end;j++){
 swap(str,begin,j);
 permutation(str,begin + 1,end);
 swap(str,begin,j);
 }
 
 }
 }
 
 |