您的位置:首页 > 其它

打印某些数字的排列组合

2010-07-08 21:14 225 查看
原帖: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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐