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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

报名56期android,在基础测试中有道题不会做,现在终于解决了

在基础测试中有道题不会做,题目,通过在论坛提问,终于理解了思路,通过自己的理解,以及反复的修改代码,测试,现在终于做出来了,当然代码还是写得不太好,希望大家能多多指教,互相学习。

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;

  5. public class MyTest7 {

  6.         //定义一个字符数组,把用户输入的字符串转换成字符数组并存到该数组中
  7.         private static char[] cs;
  8.         //用于存储每一个组合
  9.         private static List<String> list = new ArrayList<String>();
  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) {
  14.                 // TODO Auto-generated method stub
  15.                 System.out.println("请输入没有重复的字符串");
  16.                 Scanner sc = new Scanner(System.in);
  17.                 String s = sc.next();
  18.                 cs = s.toCharArray();//转换成字符数组;
  19.                 sc.close();
  20.                 //开始执行处理
  21.                 dealWith();
  22.                 //输出组合情况
  23.                 for(String e : list){
  24.                         System.out.println(e);
  25.                 }
  26.         }
  27.         /*
  28.          * 循环添加每行的组合到list集合中
  29.          */
  30.         public static void dealWith(){
  31.                 for(int i = 0;i<cs.length;i++){                       
  32.                         list.addAll(deal(i));
  33.                 }
  34.         }
  35.        
  36.         /*
  37.          * 得到每行的字符组合,采用递归实现
  38.          */
  39.         public static List<String> deal(int count){
  40.                 List<String> s = new ArrayList<String>();
  41.                 for(int i = 0; i < cs.length; i++){
  42.                         if(count == 0){
  43.                                 s.add(cs[i]+"");//组合中只有一个字符的情况
  44.                         }else{
  45.                                 List<String> result = deal(count-1);//采用递归实现
  46.                                 for(int j = 0; j < result.size(); j++){
  47.                                         //判断是否有重复字符,如果没有则添加到s集合中
  48.                                         char[] cc = result.get(j).toCharArray();
  49.                                         boolean flag = true;//标识是否有重复字符,初始化为true;
  50.                                         for(int t = 0; t < cc.length; t++){       
  51.                                                 if(cc[t]==cs[i]){
  52.                                                         flag = false;//有重复字符,标识为flase,并结束循环
  53.                                                         break;                                                       
  54.                                                 }
  55.                                         }
  56.                                        
  57.                                         //添加到s集合中
  58.                                         if(flag){
  59.                                                 s.add(cs[i]+result.get(j));
  60.                                         }
  61.                                 }
  62.                         }
  63.                 }
  64.                 return s;
  65.         }
  66. }
复制代码




评分

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

查看全部评分

3 个回复

倒序浏览
学习下。
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马