报名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;
- }
- }
复制代码
|