黑马程序员技术交流社区

标题: 报名56期android,在基础测试中有道题不会做,现在终于解决 [打印本页]

作者: ※无价※之宝    时间: 2015-1-6 16:14
标题: 报名56期android,在基础测试中有道题不会做,现在终于解决
报名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. }
复制代码





作者: bin393973282    时间: 2015-1-6 18:36
学习下。
作者: Death、    时间: 2015-1-6 20:23
感谢分享
作者: 彭学伟    时间: 2015-1-6 20:46
感谢分享。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2