黑马程序员技术交流社区

标题: 如何将char[] arr={'a','b','c'}中的数据进行全排列 想要的结果... [打印本页]

作者: 小小志    时间: 2014-12-15 16:05
标题: 如何将char[] arr={'a','b','c'}中的数据进行全排列 想要的结果...
本帖最后由 小小志 于 2014-12-23 19:45 编辑

求代码实现
作者: lidinghai    时间: 2014-12-15 16:07
import java.util.ArrayList; public class Test7 {         public static void main(String[] args) {                 // TODO Auto-generated method stub                  String s="abc";                     //调用排序方法                   combinations(s);                }                    //排序方法               private static void combinations(String s) {                    //创建一个ArrayList用来存放结果               ArrayList<String> list =new ArrayList<String>();                    //将字符串拆分成单个字符存入ArrayList                char[] ch = s.toCharArray();                for(char c:ch)                   {                       list.add(c+"");                 }                    //进行循环存入                int len=s.length();  //记录随着长度增长产生的字符串个数                   int start=0;     //用于记数                   //l表示字符串长度              for(int l=2;l<=s.length();l++)                     {                       //取出l长度的所有字符串                for(int x=0;x<len;start++,x++)                       {                   for(int in=0;in<s.length();in++)                           {                    //在l-1长度的字符串末尾添加单个字符串,产生长度为l的字符串              list.add(list.get(start)+list.get(in));                           }                       }                len=len*s.length();                   }                   //调用输出字符串方法                print(list);               }                  //输出字符串             private static void print(ArrayList<String> list) {                   for(String  ls:list)                   {                     //判断字符串是否含有相同元素,不含有则输出                       if(!isSame(ls))                       {                           System.out.print(ls+",");                       }                   }                                  }                          private static boolean isSame(String ls) {                       //对于长度大于1的进行判断                if(ls.length()>1)                   {                          //依次取出该字符串前一半的元素                 for(int n=0;n<ls.length()/2+1;n++)                           {                       //对取出的元素进行第一次出现和最后一次出现位置比较,相同则说明只存在一个该元素                   if(ls.indexOf(ls.charAt(n))==ls.lastIndexOf(ls.charAt(n)))                                   {                                                           continue;                                                                          }                         return true;//否则返回True表示存在相同元素                           }                        return false;//所有元素判断完,返回false,表示无相同元素。                   }                                   return false;               }  }
作者: lidinghai    时间: 2014-12-15 16:08
不好意思,直接粘贴过来的,太乱了,这不是那个基础测试题么。。
作者: 小小志    时间: 2014-12-15 16:19
谢谢呀 我整理一下看看
作者: as604049322    时间: 2014-12-15 16:59
lidinghai 发表于 2014-12-15 16:07
import java.util.ArrayList; public class Test7 {         public static void main(String[] args) {                 // TODO ...

把上面的代码用eclipse格式化了一下
  1. import java.util.ArrayList;

  2. public class Test7 {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 String s="abc";
  6.                 // 调用排序方法
  7.                 combinations(s);
  8.         }

  9.         // 排序方法
  10.         private static void combinations(String s) {
  11.                 // 创建一个ArrayList用来存放结果
  12.                 ArrayList<String> list = new ArrayList<String>();
  13.                 // 将字符串拆分成单个字符存入ArrayList
  14.                 char[] ch = s.toCharArray();
  15.                 for (char c : ch) {
  16.                         list.add(c + "");
  17.                 }
  18.                 // 进行循环存入
  19.                 int len = s.length(); // 记录随着长度增长产生的字符串个数
  20.                 int start = 0; // 用于记数
  21.                 // l表示字符串长度
  22.                 for (int l = 2; l <= s.length(); l++) {
  23.                         // 取出l长度的所有字符串
  24.                         for (int x = 0; x < len; start++, x++) {
  25.                                 for (int in = 0; in < s.length(); in++) {
  26.                                         // 在l-1长度的字符串末尾添加单个字符串,产生长度为l的字符串
  27.                                         list.add(list.get(start) + list.get(in));
  28.                                 }
  29.                         }
  30.                         len = len * s.length();
  31.                 }
  32.                 // 调用输出字符串方法
  33.                 print(list);
  34.         }

  35.         // 输出字符串
  36.         private static void print(ArrayList<String> list) {
  37.                 for (String ls : list) {
  38.                         // 判断字符串是否含有相同元素,不含有则输出
  39.                         if (!isSame(ls)) {
  40.                                 System.out.print(ls + ",");
  41.                         }
  42.                 }
  43.         }

  44.         private static boolean isSame(String ls) {
  45.                 // 对于长度大于1的进行判断
  46.                 if (ls.length() > 1) {
  47.                         // 依次取出该字符串前一半的元素
  48.                         for (int n = 0; n < ls.length() / 2 + 1; n++) {
  49.                                 // 对取出的元素进行第一次出现和最后一次出现位置比较,相同则说明只存在一个该元素
  50.                                 if (ls.indexOf(ls.charAt(n)) == ls.lastIndexOf(ls.charAt(n))) {
  51.                                         continue;
  52.                                 }
  53.                                 return true;// 否则返回True表示存在相同元素
  54.                         }
  55.                         return false;// 所有元素判断完,返回false,表示无相同元素。
  56.                 }
  57.                 return false;
  58.         }
  59. }
复制代码





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