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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

题目如上,求大神赐教,最好能有注解

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

12 个回复

倒序浏览
  1. import java.io.*;
  2. public class Text6 {
  3.        
  4.         public static void main(String[] args)  {
  5.                
  6.                 //调用自定义方法获取字符串的所以组合形式
  7.                 allArray();
  8.         }
  9.         public static void allArray(){
  10.                
  11.                 //开启键盘录入
  12.                 BufferedReader bufr=new BufferedReader(
  13.                                 new InputStreamReader(System.in));
  14.                 String line=null;
  15.                 //读取键盘录入的内容,并处理异常
  16.                 try
  17.                 {
  18.                         line=bufr.readLine();
  19.                 }
  20.                 catch(IOException ie)
  21.                 {
  22.                         throw new RuntimeException("读取失败");
  23.                 }
  24.                 //将读取的字符串转换成字符数组
  25.                 char[] cha=line.toCharArray();
  26.                 //定义一个字符串缓冲区,一遍对遍历组合的字符串进行存储
  27.                 StringBuffer sb=new StringBuffer();
  28.                 //将字符串添加到字符串缓冲区,以完成setCharAt操作
  29.                 sb.append(line);
  30.                 //定义一个指针,完成字符串缓冲区内字符的修改
  31.                 int count=0;
  32.                                     //记录字符串长度
  33.                 int strLen=cha.length;
  34.                 //调用自定义方法获取字符串组合形式
  35.                 getSome(cha,strLen,sb,count);
  36.                
  37.         }
  38.         public static void getSome(char[] cha,int strLen,
  39.                         StringBuffer sb,int count){
  40.                
  41.                         //采用递归的方式,在遍历数组的同时完成不同字符数的不同组合,
  42.                         for(int x=0;x<cha.length;x++)
  43.                         {
  44.                                 //更改指定Index的字符以完成相同字符数的不同组合
  45.                                 sb.setCharAt(count,cha[x]);
  46.                                 //字符串长度大于1时递归获取下一角标的字符
  47.                                 if(strLen>1)
  48.                                 {
  49.                                         //保证count在递推的循环完成后与之前相同
  50.                                         count++;
  51.                                         getSome(cha,strLen-1,sb,count);
  52.                                         count--;
  53.                                        
  54.                                 }
  55.                                 //按照填入的字符数获取组合的字符串
  56.                                 String s=sb.substring(0,count+1);
  57.                                 //定义布尔型变量,用于判断字符数组中是否有相同元素
  58.                                 boolean flog=true;
  59.                                 //将字符串转换成字符数组
  60.                                 char[] ss=s.toCharArray();
  61.                                 //通过for嵌套判断该字符数组内是否有相同元素,并用flog记录
  62.                                 for(int z=0;z<ss.length;z++){
  63.                                        
  64.                                         for(int m=z+1;m<ss.length;m++){
  65.                                                
  66.                                                 if(ss[z]==ss[m])
  67.                                                         flog=false;
  68.                                                 }       
  69.                                 }
  70.                                 //如果没有,将字符数组转换成字符串并打印。
  71.                                 if(flog)
  72.                                                 System.out.println(new String(ss,0,ss.length));
  73.                         }

  74.         }
  75. }
复制代码
我也有这道题,当时也把我难住了,研究好久才弄懂,特来分享下

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
来看看学习学习
回复 使用道具 举报
我的基础题没有这道题,来看看
回复 使用道具 举报
刘家斌 发表于 2014-10-13 12:01
我也有这道题,当时也把我难住了,研究好久才弄懂,特来分享下

感谢分享,我昨天一下载基础就开始做了,当时心急,直接没做就交上去了,少了一些分,伤不起
回复 使用道具 举报
HM2014nuli 发表于 2014-10-13 13:46
感谢分享,我昨天一下载基础就开始做了,当时心急,直接没做就交上去了,少了一些分,伤不起 ...

基础题不是没有限时吗?楼主不会可以再研究研究呀,这样丢分很可惜啊
回复 使用道具 举报
kakasa 中级黑马 2014-10-13 22:01:02
7#
本帖最后由 kakasa 于 2014-10-13 23:11 编辑

看错了。。
回复 使用道具 举报
zz_job 中级黑马 2014-10-13 22:32:26
8#
学习一下  我用的是最下面那哥们的方法
回复 使用道具 举报
学习一下,自己也不大明白这道题
回复 使用道具 举报
求亲友券。
回复 使用道具 举报
郑飞 高级黑马 2014-10-14 06:13:59
11#
有个最傻最不用动脑的方法 就是转字符数组 然后列出所有组合 最后去重复(存到不重复集合中,就自动去重复了)
回复 使用道具 举报
执着的桶牛 发表于 2014-10-13 21:07
基础题不是没有限时吗?楼主不会可以再研究研究呀,这样丢分很可惜啊

我也不知道自己是咋了,太急了
回复 使用道具 举报
已收藏,学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马