您的位置:首页 > 其它

输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻

2009-12-23 17:08 639 查看
import java.util.ArrayList;  

  

import java.util.List;  

import java.util.Set;  

import java.util.TreeSet;  

/** 

 *  

 * @author 赵学庆 www.java2000.net //摘录此人的作品

 * 

 */  

public class T {  

  public static List<String> find(List<String> list) {  

    List<String> rtn = new ArrayList<String>();  

    String str;  

    for (int i = 0; i < list.size(); i++) {  

      str = list.get(i);  

      list.remove(i);  

      if (list.size() == 0) {  

        rtn.add(str);  

      } else {  

        List<String> sList = find(list);  

        for (String s : sList) {  

          rtn.add(str + s);  

          if (s.length() == 5) {  

            addNumber(str + s);  

          }  

        }  

      }  

      list.add(i, str);  

    }  

    return rtn;  

  }  

  

  public static void addNumber(String str) {  

    if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {  

      return;  

    }  

    set.add(str);  

  }  

  

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

  

  public static void main(String[] args) {  

    List<String> list = new ArrayList<String>();  

    list.add("1");  

    list.add("2");  

    list.add("2");  

    list.add("3");  

    list.add("4");  

    list.add("5");  

    find(list);  

    System.out.println(set.size());  

    int cols = 10;  

    for (String s : set) {  

      System.out.print(s+" ");  

      if(cols--==1) {  

        System.out.println();  

        cols = 10;  

      }  

    }  

  }  



网友提供的一个比较优化的算法

import java.util.Set;  

import java.util.TreeSet  

/** 

 * 原始版本没有考虑重复问题,我进行了修正.<br> 

 * 此算法的精华就是,让一个字符串的所有位置都进行互换,<br> 

 * 这样就产生了所有可能出现的字符串。 

 *  

 * @author 赵学庆,nicky_zs <a href="http://www.java2000.net">www.java2000.net</a> 

 */  

public class MyTest {  

  public static void main(String args[]) {  

    char[] number = new char[] { '1', '2', '2', '3', '4', '5' };  

    perm(number, 0, number.length - 1);  

    System.out.println(set.size());  

    int cols = 10;  

    for (String s : set) {  

      System.out.print(s + " ");  

      if (cols-- == 1) {  

        System.out.println();  

        cols = 10;  

      }  

    }  

  }  

  public static void addNumber(String str) {  

    set.add(str);  

  }  

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

  public static void perm(char[] n, int beg, int end) {  

    if (beg == end) {  

      String result = String.valueOf(n);  

      if (n[2] == '4')  

        return;  

      if (result.contains("35") || result.contains("53"))  

        return;  

      addNumber(String.valueOf(n));  

      return;  

    }  

    for (int i = beg; i <= end; ++i) {  

      swap(n, beg, i);  

      perm(n, beg + 1, end);  

      swap(n, beg, i);  

    }  

  }  

  public static int number = 0;  

  public static void swap(char[] n, int a, int b) {  

    char temp = n[a];  

    n[a] = n[b];  

    n[b] = temp;  

  }  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 .net list string 优化
相关文章推荐