扑克序列
直接上代码:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<Character>> res = new ArrayList<>();
List<Character> path = new ArrayList<>();
Character[] arr={'A','A','2','2','3','3','4','4'};
boolean[] used=new boolean[8];
// System.out.println(arr[0]+" "+arr[1]);
dfs(res,path,arr,0,used);
for (List<Character> elem: res){
System.out.println(elem);
}
}
private static void dfs(List<List<Character>> res, List<Character> path, Character[] arr, int n, boolean[] used) {
//递归终止条件
if(n==arr.length){
//存储下标
int[] a=new int[2];
int[] b=new int[2];
int[] c=new int[2];
int[] d=new int[2];
int count1=0;
int count2=0;
int count3=0;
int count4=0;
//初始化下标
for (int i=0;i<path.size();i++){
if (path.get(i)=='A'){
a[count1++]=i;
}else if (path.get(i)=='2'){
b[count2++]=i;
}else if (path.get(i)=='3'){
c[count3++]=i;
}else {
d[count4++]=i;
}
}
//增加条件
if ((a[1]-a[0])==2&&(b[1]-b[0])==3&&(c[1]-c[0])==4&&(d[1]-d[0])==5){
//符合条件的进行添加
res.add(new ArrayList<>(path));
}
return;
}
for (int i=0;i<arr.length;i++){
if (!used[i]){
used[i]=true;
path.add(arr[i]);
//递归
dfs(res, path, arr, n+1, used);
//回溯
path.remove(path.size()-1);
used[i]=false;
}
}
}
}
/**
* 。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
* 如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。
* 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。
* 如果这两个字符串相等,则结果为 0
*/
字典序比较
public class Main {
public static void main(String[] args) {
String s1="2342A3A4";
String s2="4A3A2432";
System.out.println(s1.compareTo(s2));
}
}
这题就是全排列,我没有去重,大家可以剪枝或者用set集合。