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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深寒丶 中级黑马   /  2015-11-22 22:50  /  564 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:


原始字符串是"abc",打印得到下列所有组合情况:
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
求教一下这道题递归怎么做,我只会输出三个和一个字母的

5 个回复

倒序浏览
都没人会么.....
回复 使用道具 举报
能把你的代码贴上来不?我看完你的帮你改改
回复 使用道具 举报
z940505 发表于 2015-11-23 15:31
能把你的代码贴上来不?我看完你的帮你改改

package com.itheima;
/*
* 6、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
*
*
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
*
*@author
*@version v2015-11-23 23:33:51
*/
public class Test6 {
     /*
      * jav程序运行的入口
      * jvm自动加载main方法
      */
public static void main(String[] args) {
String s = "abc";
printArray(s,"");
}
/**
  * 字符串中的所有元素进行排序
  * @param str 需要排序的字符串
  * @param ch  每次字符串中的第一个字符
  * @param chr 拼接的两个字符
  */
private static void printArray(String str, String ch) {
if(str.length() == 0){
  System.out.println(ch);
}else{
  for(int i = 0;i < str.length();i++){
   printArray(str.substring(1),ch+str.charAt(0));
   str = str.substring(1)+str.charAt(0);
   
  }
}

}
}
回复 使用道具 举报
今天被递归作业玩疯了
回复 使用道具 举报
package com.itheima;

import java.util.ArrayList;
/**
*需求:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
*    原始字符串是"abc",打印得到下列所有组合情况:
*          "a" "b" "c"
*          "ab" "bc" "ca" "ba" "cb" "ac"
*          "abc" "acb" "bac" "bca" "cab" "cba"
*
*@author XX   XXXXXX
*@version 1.0  2015-11-25 11:35:11
*/
public class Test7 {
        /**
         * java程序运行入口
         * jvm自动加载main方法
         */
        public static void main(String[] args) {
                //创建一个字符串
                String str = "abc";
               
                //调用方法,输出结果
                String newstr = getCombination(str);
                System.out.println(newstr);
               
        }
       
        public static String getCombination(String str) {
                //创建一个Arraylist用来存放结果  
        ArrayList<String> list =new ArrayList<String>();  
        //将字符串拆分成单个字符存入ArrayList  
        char[] ch = str.toCharArray();  
        for(char c:ch)  
        {  
            list.add(c + "");   
        }  
        
        //进行循环存入  
        int len=str.length();  //记录随着长度增长产生的字符串个数  
        int start=0;           //用于记数  
        for(int i = 2;i <= str.length(); i++)  //i表示字符串长度  
        {     
            //取出i长度的所有字符串  
            for(int x = 0; x<len; start++, x++)  
            {   //在i-1长度的字符串末尾添加单个字符串,产生长度为i的字符串  
                for(int in = 0;in <str.length(); in++)  
                {  
                    list.add(list.get(start)+list.get(in));  
                }  
            }  
                            len = len*str.length();  
        }  
                                //调用输出字符串方法  
                                print(list);
                                        return str;  
    }  
       
    //输出字符串  
    private static void print(ArrayList<String> list) {  
        for(String  Ls:list)  
        {     
            //判断字符串是否含有相同元素,不含有则输出  
            if(!isSame(Ls))  
            {  
                System.out.println(Ls);  
            }  
        }  
        
        
        }

        private static boolean isSame(String Ls) {
               
                 if(Ls.length()>1)  
                {     
                 //依次取出该字符串前一半的元素  
                 for(int n = 0; n< Ls.length()/2+1; n++)  
                     {  
                         //对取出的元素进行第一次出现和最后一次出现位置比较,相同则说明只存在一个该元素  
                         if(Ls.indexOf(Ls.charAt(n)) == Ls.lastIndexOf(Ls.charAt(n)))  
                             {  
                                 continue;   
                             }  
                         return true;//否则返回True表示存在相同元素  
                     }  
                     return false;//所有元素判断完,返回false,表示无相同元素。  
             }  
                return false;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马