`
jefferent
  • 浏览: 80276 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

笔试题(7)

阅读更多

题目:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

 

答案:如下所示:

 

import java.util.Set;
import java.util.TreeSet;


/**
 * 让字符串的所有位置进行互换
 * @author jefferent@tom.com
 * 
 * Time: 2011-8-25 下午02:46:07
 */
public class Test5 {

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

    public static void perm(char[] n, int beg, int end) {
        if (beg == end) {
            addNumber(String.valueOf(n));
        } else {
            for (int i = beg; i <= end; ++i) {
                swap(n, beg, i);
                perm(n, beg + 1, end);
                swap(n, beg, i);
            }
        }
    }

    public static void swap(char[] n, int x, int y) {
        if (x == y || n[x] == n[y]) {
            return;
        }
        char temp = n[x];
        n[x] = n[y];
        n[y] = temp;
    }

    public static void addNumber(String str) {
        if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {
            return;
        }
        set.add(str);
    }

    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;
            }
        }
    }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics