...函数打印出所有的排序。要求4不能在第三位,3与5不能相连
发布网友
发布时间:2024-10-21 12:12
我来回答
共2个回答
热心网友
时间:2024-10-21 13:28
public class TestNumber {
/**
*
* @param args
*/
public static List list = new ArrayList();
public static void main(String[] args) {
group("", "12345");
System.out.println(list.size());
}
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) {// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合
if (temp.length() > 4) {
System.out.println(temp);
if (!list.contains(temp)) {
list.add(temp);
}
}
group(temp, nstr);
}
}
}
}
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;
}
}
热心网友
时间:2024-10-21 13:24
不考虑效率。
for (int i = 123456; i <= 654321; i++) {
String tmp = "" + i;
if (tmp.matches("[1-6]{2}[12356][1-6]{3}") && tmp.replaceAll("(\\d)(?=\\d*\\1)|35|53", "").length() == 6 ) {
System.out.println(i);
}
}
考虑效率。
public static void f(String in, ArrayList al) {
if (al.size() == 1) {
String tmp = in ;
if (!(tmp.contains("35") || tmp.contains("53") || tmp.indexOf('4') == 2)) {
System.out.println(tmp);
}
} else {
ArrayList hsc = (ArrayList) al.clone();
if (in.length() != 0) {
hsc.remove(in.substring(in.length() - 1));
}
for (Object i : hsc) {
f(in + i, hsc);
}
}
}
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("1");
al.add("2");
al.add("3");
al.add("4");
al.add("5");
al.add("6");
f("", al);
}