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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

提示: 该帖被管理员或版主屏蔽

10 个回复

倒序浏览
学习下~~!
回复 使用道具 举报
曾经把我虐哭的题,,,:'(:'(


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

  8. import java.util.*;
  9. class PermComStr{
  10.     public static void main(String[] args){
  11.             List<String> list=combinations("abc",true);
  12.             System.out.println(list);
  13.            
  14.     }
  15.     /*思路分析:
  16.     每行字符个数都是递增 ,下一行的字符是建立在上一行的基础上得到的
  17.     即在将第一行字符串长度限定为1,第二行为2....,在第一行数据基础上{a,b,c},创建第二行数据,遍历字符串中所字符,并与第一行数据组合。注意每行字符串长度限制
  18.     1、先将原始字符串转换成字符数组ch
  19.     2、将原始字符串每个字符添加到Arraylist<String> list集合中
  20.     3、遍历list集合用每个元素str去查找是否存在数组ch中的元素,如果ch中的字符c没有被str找到则用str+c作为新集合的值返回;
  21.     4、遍历新集合重复3步骤
  22.     */
  23.     public static List<String> combinations(String str,int num) {
  24.             List<String> list=new ArrayList<String>();
  25.             char[] ch=str.toCharArray();
  26.             if(num>ch.length)
  27.                     num=ch.length;
  28.             for(int i=0;i<num;i++){
  29.                     list=getList(list, ch);
  30.             }
  31.             return list;
  32.     }
  33.     public static List<String> combinations(String str) {
  34.             return combinations(str,str.length());
  35.     }
  36.     public static List<String> combinations(String str,boolean all) {
  37.             List<String> result=new ArrayList<String>();
  38.             List<String> temp=new ArrayList<String>();
  39.             char[] ch=str.toCharArray();
  40.             for(int i=0;i<ch.length;i++){
  41.                     temp=getList(temp, ch);
  42.                     result.addAll(temp);
  43.             }
  44.             return result;
  45.     }
  46.    
  47.         public static List<String> getList(List<String> list, char[] ch) {
  48.                 if(list.size()==0){
  49.                         for(char c:ch)
  50.                                 list.add(c+"");
  51.                         return list;
  52.                 }
  53.                 List<String> newList=new ArrayList<String>();
  54.                 for(String str:list)
  55.                         for(char c:ch)
  56.                                 if(str.indexOf(c)==-1)
  57.                                         newList.add(str+c);
  58.                 return newList;
  59.         }

  60. }


复制代码
回复 使用道具 举报
??????
回复 使用道具 举报

说我不能出现基础测试。。。
回复 使用道具 举报
本帖最后由 王建伟 于 2015-5-21 15:30 编辑
小悟空et 发表于 2015-5-21 15:12
说我不能出现基础测试。。。

好吧,你进我的主题里面看吧,我的基础测试也有这个题目,我用递归写的,当时我也是捣鼓了将近两天。。。。注释的也比较清晰。。。。希望对你有帮助。
回复 使用道具 举报
、、、、、、解答啊
回复 使用道具 举报
as604049322 发表于 2015-5-21 14:56
曾经把我虐哭的题,,,

谢谢谢谢,我看一下。大概有那么点感觉,我得好好研究下思路,等会自己写写看。
这题想思路就很虐心
回复 使用道具 举报
王建伟 发表于 2015-5-21 15:16
好吧,你进我的主题里面看吧,我的基础测试也有这个题目,我用递归写的,当时我也是捣鼓了将近两天。。。 ...

恩恩。好好。我研究一下。递归用着真是开始不好想明白
回复 使用道具 举报
小悟空et 发表于 2015-5-21 15:35
恩恩。好好。我研究一下。递归用着真是开始不好想明白

最麻烦的是不让陷入死循环那点的控制,我当时用递归陷入死循环了,贴出来问也没有人解答我,我就自己捣鼓出来了。你看看吧
回复 使用道具 举报
王建伟 发表于 2015-5-21 15:40
最麻烦的是不让陷入死循环那点的控制,我当时用递归陷入死循环了,贴出来问也没有人解答我,我就自己捣鼓 ...

不过我自己想的也可能有误区,你要是参考着想出更好的了,告诉我一下解决方案
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马