熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

關於數字排列的一個程序

2013-11-23 19:29:17  來源: Java核心技術 

  輸出的所有排列組合不能在第三位不能相鄰
    先看代碼吧

    import javautilArrayList;

  import javautilList;
    import javautilSet;
    import javautilTreeSet;
    /**
     *
     * @author 趙學慶
     *
     */
    public class T {
      public static List<String> find(List<String> list) {
        List<String> rtn = new ArrayList<String>();
        String str;
        for (int i = ; i < listsize(); i++) {
          str = listget(i);
          listremove(i);
          if (listsize() == ) {
            rtnadd(str);
          } else {
            List<String> sList = find(list);
            for (String s : sList) {
              rtnadd(str + s);
              if (slength() == ) {
                addNumber(str + s);
              }
            }
          }
          listadd(i str);
        }
        return rtn;
      }

  public static void addNumber(String str) {
        if (strcharAt() == || ntains() || ntains()) {
          return;
        }
        setadd(str);
      }

  public static Set<String> set = new TreeSet<String>();

  public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        listadd();
        listadd();
        listadd();
        listadd();
        listadd();
        listadd();
        find(list);
        Systemoutprintln(setsize());
        int cols = ;
        for (String s : set) {
          Systemoutprint(s+ );
          if(cols==) {
            Systemoutprintln();
            cols = ;
          }
        }
      }
    }

  import javautilArrayList;

  import javautilList;
    import javautilSet;
    import javautilTreeSet;
    /**
     *
     * @author 趙學慶
     *
     */
    public class T {
      public static List<String> find(List<String> list) {
        List<String> rtn = new ArrayList<String>();
        String str;
        for (int i = ; i < listsize(); i++) {
          str = listget(i);
          listremove(i);
          if (listsize() == ) {
            rtnadd(str);
          } else {
            List<String> sList = find(list);
            for (String s : sList) {
              rtnadd(str + s);
              if (slength() == ) {
                addNumber(str + s);
              }
            }
          }
          listadd(i str);
        }
        return rtn;
      }

  public static void addNumber(String str) {
        if (strcharAt() == || ntains() || ntains()) {
          return;
        }
        setadd(str);
      }

  public static Set<String> set = new TreeSet<String>();

  public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        listadd();
        listadd();
        listadd();
        listadd();
        listadd();
        listadd();
        find(list);
        Systemoutprintln(setsize());
        int cols = ;
        for (String s : set) {
          Systemoutprint(s+ );
          if(cols==) {
            Systemoutprintln();
            cols = ;
          }
        }
      }
    }

  輸出結果

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    網友提供的一個比較優化的算法

    import javautilSet;
    import javautilTreeSet
    /**
     * 原始版本沒有考慮重復問題我進行了修正<br>
     * 此算法的精華就是讓一個字符串的所有位置都進行互換<br>
     * 這樣就產生了所有可能出現的字符串
     *
     * @author 趙學慶nicky_zs <A >></A>
     */
    public class MyTest {
      public static void main(String args[]) {
        char[] number = new char[] { };
        perm(number numberlength );
        Systemoutprintln(setsize());
        int cols = ;
        for (String s : set) {
          Systemoutprint(s + );
          if (cols == ) {
            Systemoutprintln();
            cols = ;
          }
        }
      }
      public static void addNumber(String str) {
        setadd(str);
      }
      public static Set<String> set = new TreeSet<String>();
      public static void perm(char[] n int beg int end) {
        if (beg == end) {
          String result = StringvalueOf(n);
          if (n[] == )
            return;
          if (ntains() || ntains())
            return;
          addNumber(StringvalueOf(n));
          return;
        }
        for (int i = beg; i <= end; ++i) {
          swap(n beg i);
          perm(n beg + end);
          swap(n beg i);
        }
      }
      public static int number = ;
      public static void swap(char[] n int a int b) {
        char temp = n[a];
        n[a] = n[b];
        n[b] = temp;
      }
    }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26950.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.