求一道java程序题:有 1,2,2,3,4,5 六个数字,排列问题

要求:请输出它们所有不同的排序结果,如“322145”、“232154”等,要求2后不能有5!

面试见到这个题,希望有个好的答案,谢谢了!

第1个回答  2010-04-30
//resultArray存储结果信息,currentMember存储当前入队的成员,A(n,m)
//(m<n),需要待排的数组
public void arrange(ArrayList<ArrayList> resultArray,ArrayList currentMember,int n, int m,int[] needToBeArranged)
{
//当数组大小为0时将存入currentMember中的信息添加到resultArray中
if(needToBeArranged.length == 0){
resultArray.add(currentMember);
return null;
}
boolean is2behand5 = false;
//从当前的n个元素中任意选择一个
for(int i = 0; i < currentMember.length; i ++)
{
if(currentMember[i] == 5)
{
for(int j = 0; j < currentMemeber.length; j ++)
if(currentMember[j] == 2){
is2behand5 = true;
break;

}
}
//如果2在5后面跳出本次循环
if(is2behand5 == true)
continue;
//添入当前元素
//这里一定不能是原来的数组,因为java存储的是引用
ArrayList currentMemberClone = currentMember.clone();
currentMemberClone.add(currentMember[i]);
//将剩余元素的数组把currentMember[i]剔除
int mm[] = new int[needToBeArranged - 1];
for(int j = 0; j < i- 1; j ++)
{
mm[j] = needToBeArranged[j];
}
for(int j = i; j < needToBeArranged.length; j ++)
{
mm[j - 1] = needToBeArrayged[j];
}

//递归排列其余A(n-1,m-1)
arrange(currentMemberClone,currentMember,n-1,m-1,needToBeArranged);
//最终的排列结果存入resultArray中,与返回值无关
return null;

}//end for
}
第2个回答  2010-04-30
<html>
<head>
<script language="javascript">
var MM_str=new Array("1","2","2","3","4","5");
for(i=0;i<6;i++)
{
document.write("<nobr>")
for(j=0;j<6;j++)
{
if(j!=i)
{
for(k=0;k<6;k++)
{
if((k!=j)&&(k!=i))
{
for(l=0;l<6;l++)
{
if((l!=i)&&(l!=j)&&(l!=k))
{
for(m=0;m<6;m++)
{
if((m!=i)&&(m!=j)&&(m!=k)&&(m!=l))
{
for(n=0;n<6;n++)
{
if((n!=i)&&(n!=j)&&(n!=k)&&(n!=l)&&(n!=m))
{
if((i==1)&&(j==5)){;}
else if((j==1)&&(k==5)){;}
else if((k==1)&&(l==5)){;}
else if((l==1)&&(m==5)){;}
else if((m==1)&&(n==5)){;}
else if((i==2)&&(j==5)){;}
else if((j==2)&&(k==5)){;}
else if((k==2)&&(l==5)){;}
else if((l==2)&&(m==5)){;}
else if((m==2)&&(n==5)){;}
else
{
document.write(MM_str[i]);
document.write(MM_str[j]);
document.write(MM_str[k]);
document.write(MM_str[l]);
document.write(MM_str[m]);
document.write(MM_str[n]);
document.write("空格");
}
}
}
}
}
}
}
}
}
}
}
document.write("<br>");
}
</script>
</head>
</html>
第3个回答  2010-04-30
public class Permutation {
private int[] a;

public Permutation(int[] a) {
this.a = a;
}

public boolean isOk(int b, int e) {// 判断是否重复
if (b < e) {
for (int i = b; i < e; i++) {
if (a[i] == a[e])
return false;
}
}
return true;
}

public void permutation(int k) {
if (k >= a.length) {
print();
} else {
for (int i = k; i < a.length; i++) {
if (isOk(k, i)) {
swap(i, k);
permutation(k + 1);
swap(i, k);
}
}
}

}

private void swap(int i, int k) {
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}

private void print() {
for (int i = 0; i < a.length - 1; i++) {
if (a[i] == 2 && a[i + 1] == 5)
return;
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}

public static void main(String[] args) {
Permutation p = new Permutation(new int[] { 1, 2, 2, 3, 4, 5 });
p.permutation(0);
}
}本回答被提问者采纳
相似回答