A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dsh 中级黑马   /  2014-10-3 13:27  /  1099 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我的思路是递归  但是太麻烦 不知道各位有没有什么好点的办法


编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
例如:
原始字符串是"abc",打印得到下列所有组合情况
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"

2 个回复

正序浏览
/*
        编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
例如:
原始字符串是"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]);
                                }
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

回复 使用道具 举报
网上早来的,但是我没看明白

  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. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马