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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.*;


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

  7. public class Test7 {

  8.         static int count = 1;
  9. public static void main(String[] args) {
  10.                         //选定一个字符串传入组合方法中
  11.                 String str = "abcddgdse";
  12.                  group(str);
  13.                 
  14.                 }

  15.                 private static void group(String str) {
  16.                         // TODO Auto-generated method stub
  17.                         //创建一个集合并且将字符串中的字符串变为子串然后存入集合中
  18.                         List<String> list = new ArrayList<String>();
  19.                         char[] chs = str.toCharArray();
  20.                         for(int i = 0;i<chs.length;i++){
  21.                                 list.add(chs[i]+"");
  22.                         }
  23.                         //将只有两个字母的形式单独拿出来因为此时变量定义内循环初始变量为0
  24.                         int length = str.length();
  25.                         for(int x = 0;x<length;x++){
  26.                                 for(int y = 0;y<length;y++){
  27.                                         //判定元素之间是否有包含关系
  28.                                         if(!list.get(y).contains(list.get(x)))
  29.                                                 //将不相同的元素相加得到新元素自动装拆箱
  30.                                                 list.add(list.get(x)+list.get(y));
  31.                                 }
  32.                                
  33.                         }
  34.                         //定义集合长度和内循环的初始量sum传入方法中
  35.                         int num = list.size();
  36.                         int sum =length;
  37.                         setList(list, length, num,sum);
  38.                        
  39.                 }

  40.                 private static void setList(List<String> list, int length, int num,int sum) {
  41.                         //循环得位字母开始就必须是一位字母和上一次获得的字母相加 而不跟以前的相加
  42.                         for(int x = 0;x<length;x++){
  43.                                 for(int y = sum;y<num;y++){
  44.                                         //判定元素之间是否有包含关系
  45.                                         if(!list.get(y).contains(list.get(x)))
  46.                                                 //将不相同的元素相加得到新元素自动装拆箱
  47.                                                 list.add(list.get(x)+list.get(y));
  48.                                 }
  49.                         }
  50.                         num = list.size();
  51.                         //递归结束标记定义
  52.                         if(count<length-2){
  53.                         //运用数字排列组合的思想得到sum然后递归
  54.                                 sum=sum*(sum-count)+length;
  55.                                
  56.                                 count++;
  57.                         setList(list,length,num,sum);
  58.                         }
  59.                         //最后递归完成,循环便利获取元素内容
  60.                         else{
  61.                        
  62.                                 for(String s : list){
  63.                                         System.out.println(s);
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68.                
  69.                
  70.        
复制代码


超过4个字母以上都只出来4个字母从1个到4个的全排列,没有一个5个的 求大神帮助

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
  1. import java.util.*;


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

  7. public class Test7 {

  8.         static int count = 1;
  9. public static void main(String[] args) {
  10.                         //选定一个字符串传入组合方法中
  11.                 String str = "abcdef";
  12.                  group(str);
  13.                 
  14.                 }

  15.                 private static void group(String str) {
  16.                         // TODO Auto-generated method stub
  17.                         //创建一个集合并且将字符串中的字符串变为子串然后存入集合中
  18.                         List<String> list = new ArrayList<String>();
  19.                         char[] chs = str.toCharArray();
  20.                         for(int i = 0;i<chs.length;i++){
  21.                                 list.add(chs[i]+"");
  22.                         }
  23.                         //将只有两个字母的形式单独拿出来因为此时变量定义内循环初始变量为0
  24.                         int length = str.length();
  25.                         for(int x = 0;x<length;x++){
  26.                                 for(int y = 0;y<length;y++){
  27.                                         if(!list.get(y).contains(list.get(x)))
  28.                                                 list.add(list.get(x)+list.get(y));
  29.                                 }
  30.                                
  31.                         }
  32.                         //定义集合长度和内循环的初始量sum传入方法中

  33.                         for(int x = 0;x<length;x++){
  34.                                 int num = list.size();
  35.                                 for(int y = length;y<num;y++){
  36.                                         //判定元素之间是否有包含关系
  37.                                         if(!list.get(y).contains(list.get(x)))
  38.                                                 //将不相同的元素相加得到新元素自动装拆箱
  39.                                                 list.add(list.get(x)+list.get(y));
  40.                                 }
  41.                         }
  42.                
  43.                         for(String s : list){
  44.                                 System.out.println(s);
  45.                         }
  46.                 }
  47. }
复制代码


看来只有自己来了 没人理我
回复 使用道具 举报
  1. /*
  2. 思路:
  3.         1.将每次字符串拆成字符数组再存入集合中.
  4.         2.先排列一个字符的排列,在排列两个字符的排列一次类推知道与字符串长度一样
  5.         3.每次都拿刚排列好的字符串与字符串的各个字符编列排列,产生长度加以的字符串排列
  6. */

  7. import java.util.*;
  8. class  StringQuanPaiLie
  9. {
  10.         //static int count = 1;
  11.         public static void main(String[] args)
  12.         {
  13.                 String str="abcdef";
  14.                
  15.                 List<String> list=Stringsplit(str);
  16.                 //System.out.println("   "+list);
  17.                 for(int i=0;i<list.size();i++)
  18.                 {
  19.                         System.out.println(list.get(i));       
  20.                 }
  21.                 System.out.println(list.size());
  22.         }
  23.         private static List<String> Stringsplit(String str)
  24.         {       
  25.                 int sum=str.length();//排列计数
  26.                 int lie =str.length();
  27.                 int count=str.length();
  28.                 List<String> list= new ArrayList<String>();
  29.                 char[] chs =str.toCharArray();//将字符串拆分成字符数组让后装入集合中
  30.                 for(int i=0;i<chs.length;i++)
  31.                 {
  32.                         list.add(chs[i]+"");
  33.                 }
  34.                 while(lie>1)
  35.                 {
  36.                         group(list,count,sum,str);
  37.                        
  38.                        
  39.                         count=count*--lie;//每多一个字符时产生的排列的个数

  40.                         sum=count+sum;//排列累加的个数
  41.                         //System.out.println("count"+count);
  42.                         //System.out.println("lie"+lie);
  43.                         //System.out.println("sum"+sum);
  44.                        
  45.                 }
  46.                 return list;

  47.         }
  48.         private static void group(List<String> list,int count,int sum,String str)
  49.         {
  50.                
  51.                 for(int x=0;x<str.length();x++)
  52.                 {
  53.                         for(int y =sum-count;y<sum;y++)
  54.                         {
  55.                                  if(!list.get(y).contains(list.get(x)))
  56.                  //将不相同的元素相加得到新元素自动装拆箱
  57.                  list.add(list.get(x)+list.get(y));
  58.                         }
  59.                 }
  60.         }

  61. }
复制代码
这是根据你的思路写的,练练手

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
厉害,就抽到了这题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马