A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案
import java.util.Set; import java.util.TreeSet; public class Main { static char[] arr = {'A','A','2','2','3','3','4','4'}; static char[] res = new char[8]; static int[] book = new int[8]; static Set<String> set = new TreeSet<String>(); public static void main(String[] args) { dfs(0); for (String s : set) System.out.println(s); } private static void dfs(int idx) { if (idx == 8) { if (check()) set.add(new String(res)); } else { for (int i = 0; i < 8; i++) if (book[i] == 0) { book[i] = 1; res[idx] = arr[i]; dfs(idx + 1); book[i] = 0; } } } static boolean check() { String str = new String(res); return str.lastIndexOf("A") - str.indexOf("A") == 2 && str.lastIndexOf("2") - str.indexOf("2") == 3 && str.lastIndexOf("3") - str.indexOf("3") == 4 && str.lastIndexOf("4") - str.indexOf("4") == 5; } }