原帖:http://topic.csdn.net/u/20100605/00/10239b5c-3cf7-4402-a537-3d4f302d2824.html /* 该公司笔试题就1个,要求在10分钟内作完。 题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 请问这题怎么做呢 */ /* 构思:这里需要先将其中一个 2 当成一个特殊的数字 6 来处理,然后在排除重复的情况,采用正则处理. */ //package com.ricky.www; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.LinkedHashSet; public class Test2{ public static void main(String[] args){ LinkedHashSet<String> set = process(); int ln = 0; for(String str : set){ System.out.printf("%-7s",str); if(++ln % 10 == 0){ System.out.println(); } } System.out.println(); System.out.println("Total: " + set.size()); } private static LinkedHashSet<String> process(){ LinkedHashSet<String> set = new LinkedHashSet<String>(); String regex1 = "([1-6])(?!//1)([1-6])(?!//1|//2|4)([1-6])(?!//1|//2|//3)([1-6])(?!//1|//2|//3|//4)([1-6])(?!//1|//2|//3|//4|//5)([1-6])"; String regex2 = "35"; Pattern pattern1 = Pattern.compile(regex1); Pattern pattern2 = Pattern.compile(regex2); Matcher matcher = null; int ln = 0; for(int i = 123456 ; i <= 654321 ; i ++){ matcher = pattern1.matcher(i + ""); //测试不重复 if(!matcher.matches()){ continue; } //测试35不相连 matcher = pattern2.matcher(i + ""); if(matcher.find()){ continue; } String element = i + ""; element = element.replace("6","2"); set.add(element); } return set; } }