解法1
本题目可以不用代码,可以采用推理只要符合条件即可。
- 要想是最小则最小的字符是2必须在前
- 2之间要有2个字符所以次小的字符在2个2之间,
- 然后依次类推
- 因为一共有8位,而4在第3位故肯定有个4在最后一位
- 最大的字符肯定在后面,故A在倒数第2位
- 最后得出答案为2342A3A4
解法2
import java.util.HashSet;
import java.util.Set;
public class Main {
static Set<String> set = new HashSet<String>();
public static void main(String[] args) {
char[] arr = {'A', 'A', '2', '2', '3', '3', '4', '4'};
f(arr,0);
for (String str : set) {
System.out.println(str);
}
}
private static void f(char[] arr, int k) {
if(k == arr.length) {
String str = new String(arr);
if(check(str)) {
set.add(str);
}
return;
}
for (int i = k; i < arr.length; i++) {
char t = arr[k];
arr[k] = arr[i];
arr[i] = t;
f(arr, k+1);
t = arr[k];
arr[k] = arr[i];
arr[i] = t;
}
}
private static boolean check(String str) {
if(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) {
return true;
}
return false;
}
}