黑马程序员技术交流社区

标题: 关于这题的解决思路详解 [打印本页]

作者: dsh    时间: 2014-10-3 13:27
标题: 关于这题的解决思路详解
我的思路是递归  但是太麻烦 不知道各位有没有什么好点的办法


编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
例如:
原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
作者: ye361571404    时间: 2014-10-3 20:34
网上早来的,但是我没看明白

  1. public class Test {
  2.         public static String[] mid(String[] str,String[] middle)    //-----中间方法
  3.     {
  4.             String[] end =new String[(middle.length*(str.length-middle[0].length()))];
  5.             int pp=0;
  6.             
  7.             for (int i=0;i<middle.length;i++)
  8.             {
  9.                     for (int ii=0;ii<str.length;ii++)
  10.                     {
  11.                             if (middle[i].indexOf(str[ii])<0)
  12.                             {
  13.                                     end[pp++]=middle[i]+str[ii];
  14.                             }
  15.                     }
  16.             }
  17.             return end;
  18.     }
  19.    
  20.     public static String[] turn(String[] str)                                //-------------主方法
  21.     {
  22.             String[] end=new String[count(str.length)];
  23.             int pp=0;
  24.             System.arraycopy(str,0,end,pp,str.length);
  25.             pp+=str.length;
  26.             String[] middle =str;
  27.             for (int i=0;i<str.length-1;i++)
  28.             {
  29.                     middle=mid(str,middle);
  30.                     System.arraycopy(middle,0,end,pp,middle.length);
  31.               pp+=middle.length;
  32.             }
  33.             return end;
  34.     }
  35.    
  36.     public static int count(int length)                                        //---------------计数返回数组维数
  37.     {
  38.             if (length>1)
  39.             return length+length*count(length-1);
  40.             else
  41.             return 1;
  42.     }
  43.                            
  44.             
  45.     public static void show(String[] str)                                                //------------打印数组
  46.     {
  47.             for (String i : str)
  48.             {
  49.                     System.out.print(i+"\t");
  50.             }
  51.             System.out.println();
  52.             System.out.println();
  53.     }
  54.    
  55.     public static void main(String[] args)
  56.     {
  57.             String[] str1={"A","B","C"};
  58.             show(turn(str1));
  59.     }

  60. }
复制代码


作者: 鲁行    时间: 2014-10-3 22:09
/*
        编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
例如:
原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
*/

class Test
{
        public static void main(String[] args)
        {
                //定义一个字符串
                String str = "abc";
                //调用String类的将字符串变数组的方法
                char[] ch = str.toCharArray();
                //用for循环进行嵌套
                for (int x=0;x<ch.length ;x++ )
                {
                        //读到第一个字符时直接将其输出.
                        System.out.println(ch[x]);
                        //读到第二个字符时,只有当两个字符不相同时才输出.
                        for(int y=0;y<ch.length;y++)
                        {
                                if(x!=y)
                                        System.out.println(""+ch[x]+ch[y]);
                                //读到第三个字符时,只有当三个字符都不相同时才输出.
                                for(int z=0;z<ch.length;z++)
                                {
                                        if(z!=x&&z!=y&&x!=y)
                                                System.out.println(""+ch[x]+ch[y]+ch[z]);
                                }
                        }
                }
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2