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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hadesi 初级黑马   /  2015-7-12 01:38  /  2701 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

25黑马币
输入一个字符串,打印该字符串任意个数字符所有可能的排列组合。
在网上看了几个方法都无法实现,或者存在漏洞,希望能解答。

最佳答案

查看完整内容

借花献佛,看到别人的思路,自己改良了下代码,希望能帮助到你。

1 个回复

倒序浏览
  1. import java.util.*;
  2. import java.io.*;
  3. import java.lang.reflect.*;
  4. public class Test {
  5.         public static void main(String[] args) {
  6.                 System.out.println("请输入一个字符串:");
  7.                 //实例化Scanner工具类,获取封装后的标准输入流
  8.                 Scanner input = new Scanner(System.in);
  9.                 String str = input.nextLine();
  10.                 input.close();
  11.                 showStr(str);
  12.         }
  13.         /**
  14.          * 计算并输入字符串的全字符组合情况
  15.          */
  16.         public static void showStr(String str) {
  17.                 char[] array = str.toCharArray();
  18.                 String[]strs=new String[array.length];
  19.                 for (int i = 0; i < array.length; i++) {
  20.                         strs[i]=""+array[i];
  21.                 }//构建初始字符串元素数组
  22.                 printObj(strs);//输出第一行排列情况
  23.                 for (int i = 1; i < array.length; i++) {                        
  24.                         //getAmn方法用于计算第(i+1)行字符排列情况的总数
  25.                         strs=getNewStrs(array,strs,getAmn(array.length,i+1));
  26.                         printObj(strs);//输出第(i+1)行排列情况
  27.                 }
  28.                
  29.         }
  30.         /**
  31.          * 计算字符排列情况的总数
  32.          * 排列,就是指从给定个数的元素中取出指定个数的元素进行排序
  33.          */
  34.         private static int getAmn(int length, int i) {
  35.                 //System.out.print("A(" + length + "," + i + ")=");
  36.                 int sum = 1;
  37.                 while (i != 0) {
  38.                         sum *= (length--);
  39.                         i--;
  40.                 }
  41.                 //System.out.println(sum);
  42.                 return sum;
  43.         }
  44.         /**
  45.          * 根据前一行的组合,获取新组合
  46.          */
  47.         private static String[] getNewStrs(char[] array, String[] strs,int sum) {
  48.                 String[]newStrs=new String[sum];
  49.                 int count=0;
  50.                 for (int i = 0; i < strs.length; i++) {
  51.                         for (int j = 0; j < array.length; j++) {
  52.                                 if(strs[i].indexOf(array[j])<0){
  53.                                         newStrs[count++]=strs[i]+array[j];
  54.                                                                                
  55.                                 }
  56.                         }
  57.                 }
  58.                                 System.out.println(newStrs[0]);
  59.                 return newStrs;
  60.         }

  61.         /**
  62.          * 输出指定内容
  63.          */
  64.         private static void printObj(Object obj) {
  65.                 Class<? extends Object> clazz=obj.getClass();
  66.                 if(clazz.isArray()){
  67.                         int len=Array.getLength(obj);
  68.                         for(int i=0;i<len;i++)
  69.                                 System.out.print("\""+Array.get(obj, i)+"\""+"\t");
  70.                 }else{
  71.                         System.out.println(obj);
  72.                 }
  73.                 System.out.println();
  74.         }

  75. }
复制代码


借花献佛,看到别人的思路,自己改良了下代码,希望能帮助到你。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马