问题描述
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.用Java这个应该怎么写?
解决方案
public class Test8{ /** * 排列 用1、2、2、3、4、5这六个数字,打印出所有不同的排列, 如:512234、412345等,要求:"4" * 不能在第三位,"3"与"5"不能相连. * * @param sb * 符合条件的数字 * @param list * 输入的数字 * @param index * 第几位 * @param k * 已经用过的数组下标 * * @return */ public static Object a2(StringBuffer sb, String[] list, int index, String k) { String[] objs = list; for (int i = 0; i < objs.length; i++) {// int ff = 0;// // 是否第一次,第一次不需要判断是否用过// if (!k.equals("-1"))// {// String[] iss = k.split(",");// for (int j = 0; j < iss.length; j++)// {// // 判断该数字是否已经用过了// if (iss[j].equals(i + ""))// {// ff = 1;// break;// }// }// }// if (ff == 1)// {// // 用过的数字不能再用,重新计算// continue;// } sb.append(objs[i] + ","); if (list.length - 1 == index) { String[] end = sb.toString().split(","); int temp = 0; for (int j = 0; j < end.length; j++) { // 3,5不能相临 if (j != end.length - 1 && "3".equals(end[j]) && "5".equals(end[j + 1])) { temp = 1; break; } } // 4不能在第3位 if (!"4".equals(end[2]) && temp == 0) { System.out.println(sb.toString()); } sb.delete(sb.length() - 2, sb.length()); continue; } else { a2(sb, objs, ++index, k + "," + i); } --index; sb.delete(sb.length() - 2, sb.length()); } return ""; } public static void main(String[] args) { String in = "1,2,2,3,4,5"; String[] objs = in.split(","); StringBuffer sb = new StringBuffer(); a2(sb, objs, 0, "-1"); }}// 注释掉的的部分是为不可重复的,一个数字只能出现一次。// 1,2,3,4,5,6,,不会出现:1,2,3,4,5,5
解决方案二:
for (int i = 122345; i <= 543221; i++) { String tmp = "" + i; if (tmp.matches("[1-6]{2}[12235][1-6]{3}") && tmp.replaceAll("(\d)(?=\d*\1)|35|53", "").length() == 6 ) { System.out.println(i); } }