java算法题?急

用1、2、2、3、4、5这6个数,用java写一个main函数,打印出所有不同的排列,入512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
现在无财富值了,请大家多多包函.

import java.util.ArrayList;
import java.util.List;

/**
* 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连.
*
* @author SIMONE [email protected] 2009-6-12
*/
public class GroupTest {
public static List<String> list = new ArrayList<String>();

/**
* 构造字符串的所有排序组合
*
* @param str 将要组合成的字符
* @param nstr 源字符串集
*/
public static void group(String str, String nstr) {
if (str.length() != nstr.length()) {
String rest = getRest(str, nstr);
for (int i = 0; i < rest.length(); i++) {
String temp = str + rest.substring(i, i + 1);
if (temp.indexOf("4") != 2 && temp.indexOf("35") == -1 && temp.indexOf("53") == -1) {// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合
System.out.println(temp);
if (!list.contains(temp)) {
list.add(temp);
}
group(temp, nstr);
}
}
}
}

/**
* 从源字符串集中去除将要组合成的字符
*
* @param str 将要组合成的字符
* @param nstr 源字符串集
* @return 剩余字符串集
*/
public static String getRest(String str, String nstr) {
String rest = "";
if (nstr.length() > str.length()) {
rest = nstr;
for (int i = 0; i < str.length(); i++) {
rest = rest.replaceFirst(str.substring(i, i + 1), "");// 注意此处的replaceFirst,而不是replaceAll
}
}
return rest;
}

public static void main(String[] args) {
group("", "122345");
System.out.println(list.toString());
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-13
package test;
public class Numarray {
/**
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,
如:512234、412345等,要求: "4 "不能在第三位, "3 "与 "5 "不能相连.
*/
public static void main(String[] a){
long start;
System.out.println("结果是:");
int count = 0 ;

for(start=122345;start <=543221;start++){
String s = String.valueOf(start);
if(Validate(s))
{
if((s.indexOf("35")==-1)&&(s.indexOf("53")==-1)&&(s.charAt(2)!='4')){
System.out.println(s);
count++;
}
}
}

System.out.println("最后结果共"+count);
}

public static boolean Validate(String l)
{
int[] a = new int[]{0,0,0,0,0};
for(int i=0;i <6;i++)
{ if(l.charAt(i)=='1')
a[0]++;
if(l.charAt(i)=='2')
a[1]++;
if(l.charAt(i)=='3')
a[2]++;
if(l.charAt(i)=='4')
a[3]++;
if(l.charAt(i)=='5')
a[4]++;
}
if(a[0]==1&&a[1]==2&&a[2]==1&&a[3]==1&&a[4]==1)
return true;
else
return false;
}
}
第2个回答  2010-04-13
递归算法
public class Permutation {
private static int total = 0;

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "122345";
String st = "";
per(s, st, s.length());
// System.out.println(s.indexOf("zn"));
}

private static void per(String s, String st, int len) {
// TODO Auto-generated method stub
String ks;
String ks1;
String ks2;
for (int i = 0; i < s.length(); i++) {
ks = s.charAt(i) + "";
ks1 = st;
st = st + ks;
String ss = s;
s = "";
for (int j = 0; j < ss.length(); j++) {
if (i != j) {
s = s + ss.charAt(j) + "";
}
}
if (len == 1) {
if (st.indexOf("53") == -1 && st.indexOf("35") == -1 && st.indexOf("4") != 2) {// 排除5,3相邻,4在第三位置的排列
System.out.println("total" + total++ + "= " + st);

}
}
per(s, st, --len); // 递归
st = ks1; // 回归过程
s = ss; //
len++; //

}
}
}
相似回答