扑克序列

扑克序列

直接上代码:

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集合。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值