By Lee - Last updated: 星期五, 六月 21, 2013

java排列数字组合面试题

要求用java语言编写程序,输出数字1,2,2,3,4,5的所有可能的排列组合,而且4不能在第三位,3和5不能相邻,例如122345是正确的,12435是错误的。

参考答案代码一

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

/* *

public class Test { public static void main(String[] args) { int[] nums = new int[]{1,2,2,3,4,5}; int len = nums.length; Set set = new TreeSet(); int[] indexs = new int[]{0,0,0,0,0,0}; for(indexs[0]=0; indexs[0] for(indexs[1]=0; indexs[1] for(indexs[2]=0; indexs[2] for(indexs[3]=0; indexs[3] for(indexs[4]=0; indexs[4] for(indexs[5]=0; indexs[5] {

//同一个字符重复出现的跳过,两个2不是同一个字符

boolean skip = false;

a:

for(int i=0;i

for(int j=i+1;j {

if(indexs[i]==indexs[j]) {

skip = true;

break a;

}

}

if(skip) {

continue;

}

//4不能在第三位

if(4==nums[indexs[2]]) {

continue;

}

//3和5不能相邻

boolean ok = true;

int[] tmpResult = new int[]{nums[indexs[0]],nums[indexs[1]],nums[indexs[2]],nums[indexs[3]],nums for(int i=0; i {

if(2==Math.abs(tmpResult[i]-tmpResult[i+1]) && 8==(tmpResult[i]+tmpResult[i+1])) {

ok = false;

break;

}

}

if(ok) {

//自动去重,其实这是针对两个2的

set.add(“”+tmpResult[0]+tmpResult[1]+tmpResult[2]+tmpResult[3]+tmpResult[4]+tmpResult[5])

}

}

System.out.println(“共

有 “+set.size()+” 个”);

Iterator iter = set.iterator();

int no = 1;

while(iter.hasNext()) {

if(no%10==1) {

System.out.println();

System.out.print(no);

}

no++;

System.out.print(” ” + iter.next());

}

}

}

答案代码二,只写思路,这个虽然有点笨,当很直观,容易理解:

for(int i=0;i<6;i++) //第层for循环 ,确定第1个数字

for(int i2=0;i2<6;i2++) //第层for循环 ,确定第2个数字

for(int i3=0;i3<6;i3++) //第层for循环 ,确定第3个数字

for(int i4=0;i4<6;i4++) //第层for循环 ,确定第4个数字

for(int i5=0;i5<6;i5++) //第层for循环 ,确定第5个数字

for(int i6=0;i6<6;i6++) //第层for循环 ,确定第6个数字

最后使用 全部 add 到 set 里边,去掉 重复的组合。再手工移去不符合要求的组合。剩下来的就是结果了。

这个很简单,只有了6 层循环。

答案代码三:

import java.util.*;

public class Test { public static void main(String[] args) { for (int i = 122345; i <= 543221; i++) { String s = String.valueOf(i); if (s.contains(“35”) || s.contains(“53”) || “4”.equals(s.substring(2, 3))) continue;//排除35相邻和第三位为4

        char[] c = s.toCharArray(); Arrays.sort(c); if (!String.valueOf(c).equals(“122345”)) continue;//排除这些数字之外的组合

        System.out.println(s);

    } } }

很感谢这位朋友,他的思路更加简单,呵呵。思路很好.