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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bjuth 中级黑马   /  2014-11-21 13:55  /  1800 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

这是入学测试题:

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



我现在能输出:
"a" "b" "c"
"ab" "ac" "ba" "bc" "ca" "cb"
"abc" "acb" "bac" "bca" "cab" "cba"


算不算没达到要求啊??

14 个回复

倒序浏览
额。。。他的要求是随意输出一个字符串输出他的全排列组合
回复 使用道具 举报
我 没做到入学测试呢,这里看了下楼主的题  说说我的思路: 的到的结果是从1个字符开始的并且 最长的情况不能大于原始字符串的长度,那么 楼主就可以根据长度 的 不断增加分别得出 每个长度下的字符组合  进而得出所有组合,  代码由于我还在上班。。。根据这个思路 代码也应该能写出来。  不知论坛其他大神有何高见
回复 使用道具 举报
cbb 中级黑马 2014-11-21 18:52:16
板凳
这是我的基础题~~汗~~~~~
回复 使用道具 举报
金福林 来自手机 中级黑马 2014-11-21 19:59:56
报纸
得,我也遇到这道题了,确实自己没想出来。。。好受打击呀
回复 使用道具 举报
http://bbs.itheima.com/thread-113625-1-1.html

发现了这一题论坛的链接
回复 使用道具 举报
我也遇到这题了,百度的
回复 使用道具 举报
有点难,关键要找出规律,今晚好好想想
回复 使用道具 举报
bjuth 中级黑马 2014-12-2 10:04:05
9#
基础题测试得了9分多 这题应该算是对了

提供一下自己的思路

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import java.util.TreeSet;

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

  10. public class Test8 {

  11.         // 计算应该排列的数量(此函数可省)
  12.         // 比如有4个字符时是:A41+A42+A43+A44=4+4*3+4*3*2+4*3*2*1,其中A43=A44
  13.         private static int getCount(int length, int l, int count) {
  14.                 int c1 = 1;
  15.                 for (int i = length; i >= l; i--) {
  16.                         c1 = c1 * i;
  17.                 }
  18.                 l--;
  19.                 if (l == 1) {
  20.                         count = count + c1 + c1;
  21.                         // System.out.println(length+" "+l+" "+count);

  22.                         return count;
  23.                 } else {
  24.                         count = count + c1;
  25.                         // System.out.println(length+" "+l+" "+count);
  26.                         return getCount(length, l, count);
  27.                 }
  28.         }

  29.         // 排列
  30.         private static void getPermutation(LinkedList<Character> list, String str,
  31.                         ArrayList<String> arr) {

  32.                 LinkedList<Character> list1 = (LinkedList<Character>) list.clone();
  33.                 String str1;

  34.                 // 以初始str+list内剩余c进行字符串连接,循环遍历
  35.                 for (int j = 0; j < list.size(); j++) {
  36.                         char c = list.get(j);
  37.                         System.out.print(str + c + " ");
  38.                         arr.add(str + c);
  39.                 }

  40.                 // 在list内循环选c,去除选定的c,递归
  41.                 for (int i = 0; i < list1.size(); i++) {
  42.                         str1 = str + list1.get(i);
  43.                         list1.remove(i);
  44.                         getPermutation(list1, str1, arr);
  45.                         list1 = (LinkedList<Character>) list.clone();
  46.                 }

  47.         }

  48.         public static void main(String[] args) {

  49.                 String srcString = "abc";

  50.                 int length = srcString.length();
  51.                 int count = getCount(length, length, 0);
  52.                 System.out.println("应该有:" + count + "种情况");

  53.                 LinkedList<Character> list = new LinkedList<Character>();
  54.                 ArrayList<String> arr = new ArrayList<String>();
  55.                 for (int i = 0; i < length; i++) {
  56.                         list.add(srcString.charAt(i));
  57.                 }

  58.                 System.out.println("生成顺序:");
  59.                 getPermutation(list, "", arr);
  60.                 System.out.println();

  61.                 System.out.println("按需求输出:");
  62.                 for (int i = 0, j = 1, count1 = 0; count1 < arr.size(); i++) {
  63.                         if (i >= arr.size()) {
  64.                                 i = 0;
  65.                                 j++;
  66.                                 System.out.println();
  67.                         } else {
  68.                                 if ((arr.get(i)).length() == j) {
  69.                                         System.out.print("\"" + arr.get(i) + "\" ");
  70.                                         count1++;
  71.                                 }
  72.                         }
  73.                 }

  74.         }

  75. }
复制代码
回复 使用道具 举报
bjuth 中级黑马 2014-12-2 10:06:02
10#
应该有:64种情况
生成顺序:
a b c d ab ac ad abc abd abcd abdc acb acd acbd acdb adb adc adbc adcb ba bc bd bac bad bacd badc bca bcd bcad bcda bda bdc bdac bdca ca cb cd cab cad cabd cadb cba cbd cbad cbda cda cdb cdab cdba da db dc dab dac dabc dacb dba dbc dbac dbca dca dcb dcab dcba
按需求输出:
"a" "b" "c" "d"
"ab" "ac" "ad" "ba" "bc" "bd" "ca" "cb" "cd" "da" "db" "dc"
"abc" "abd" "acb" "acd" "adb" "adc" "bac" "bad" "bca" "bcd" "bda" "bdc" "cab" "cad" "cba" "cbd" "cda" "cdb" "dab" "dac" "dba" "dbc" "dca" "dcb"
"abcd" "abdc" "acbd" "acdb" "adbc" "adcb" "bacd" "badc" "bcad" "bcda" "bdac" "bdca" "cabd" "cadb" "cbad" "cbda" "cdab" "cdba" "dabc" "dacb" "dbac" "dbca" "dcab" "dcba"
回复 使用道具 举报
LZ不是都实现了吗...只是顺序不同就不可以,你以为谁跟你有仇啊...
回复 使用道具 举报
bjuth 中级黑马 2014-12-2 14:24:16
12#
桃华月禅 发表于 2014-12-2 11:35
LZ不是都实现了吗...只是顺序不同就不可以,你以为谁跟你有仇啊...

输出结果顺序不同 说明递归方法不同
这题考的是递归方法 由结果写算法 一定是这样:)
回复 使用道具 举报
好难!!!
回复 使用道具 举报
学习了。。。
回复 使用道具 举报
还好吧  一半
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马