今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
public class Main { public static void main(String[] args) { f("74112243735566".toCharArray(), 0); //这边整理一下填入的数据其实就是一步剪枝 } private static void f(char[] arr, int step) { if(step == arr.length - 1) { if(arr[0] == ‘7‘ && arr[1] == ‘4‘ && arr[8] == ‘7‘ && arr[6] == ‘4‘ && g(String.valueOf(arr))) { System.out.println(String.valueOf(arr)); //我们只需要答案就够了,所以不用优化 } //g方法判断放前面还是放后面也有讲究 return; } for(int i = step; i < arr.length; i ++) { char t = arr[step]; arr[step] = arr[i]; arr[i] = t; f(arr, step + 1); t = arr[step]; arr[step] = arr[i]; arr[i] = t; } } private static boolean g(String s) { for(int i = 1; i <= 7; i ++) { if(s.lastIndexOf(i + 48) - s.indexOf(i + 48) - 1 != i) { //里面是ASCII码 return false; } } return true; } }