java排列数字组合面试题

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;

/*
*
* @author java面试题
*
*/

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

        }
    }
}

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