黑马程序员技术交流社区
标题:
报名56期android,在基础测试中有道题不会做,现在终于解决
[打印本页]
作者:
※无价※之宝
时间:
2015-1-6 16:14
标题:
报名56期android,在基础测试中有道题不会做,现在终于解决
报名56期android,在基础测试中有道题不会做,现在终于解决了
在基础测试中有道题不会做,
题目
,通过在论坛提问,终于理解了思路,通过自己的理解,以及反复的修改代码,测试,现在终于做出来了,当然代码还是写得不太好,希望大家能多多指教,互相学习。
package com.itheima;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MyTest7 {
//定义一个字符数组,把用户输入的字符串转换成字符数组并存到该数组中
private static char[] cs;
//用于存储每一个组合
private static List<String> list = new ArrayList<String>();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入没有重复的字符串");
Scanner sc = new Scanner(System.in);
String s = sc.next();
cs = s.toCharArray();//转换成字符数组;
sc.close();
//开始执行处理
dealWith();
//输出组合情况
for(String e : list){
System.out.println(e);
}
}
/*
* 循环添加每行的组合到list集合中
*/
public static void dealWith(){
for(int i = 0;i<cs.length;i++){
list.addAll(deal(i));
}
}
/*
* 得到每行的字符组合,采用递归实现
*/
public static List<String> deal(int count){
List<String> s = new ArrayList<String>();
for(int i = 0; i < cs.length; i++){
if(count == 0){
s.add(cs[i]+"");//组合中只有一个字符的情况
}else{
List<String> result = deal(count-1);//采用递归实现
for(int j = 0; j < result.size(); j++){
//判断是否有重复字符,如果没有则添加到s集合中
char[] cc = result.get(j).toCharArray();
boolean flag = true;//标识是否有重复字符,初始化为true;
for(int t = 0; t < cc.length; t++){
if(cc[t]==cs[i]){
flag = false;//有重复字符,标识为flase,并结束循环
break;
}
}
//添加到s集合中
if(flag){
s.add(cs[i]+result.get(j));
}
}
}
}
return s;
}
}
复制代码
作者:
bin393973282
时间:
2015-1-6 18:36
学习下。
作者:
Death、
时间:
2015-1-6 20:23
感谢分享
作者:
彭学伟
时间:
2015-1-6 20:46
感谢分享。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2