阿里校招编程打牌题--DFS的灵活应用以及设计思路分析

可能在公司业务代码写的恶心了需要看看清新的内容,看了下昨天阿里校招实习的题目,题目内容:
(看别人解题逻辑来启发自己,代码是别人的,思路是我总结的)

有一叠扑克牌,每张牌介于1和10之间

有四种出牌方法:

单出1张
出2张对子
出五张顺子,如12345
出三连对子,如112233
给10个数,表示1-10每种牌有几张,问最少要多少次能出完

分析思路:出牌方式有很多种,所以需要把每种出牌方式的出牌次数都计算出来,是DFS的思路,每次递归进去都是一种出牌选择,我们要做的主要是梳理设计这个递归函数的终止条件(把牌打完)和出牌方式判断(比如满足什么条件能出顺子),递归进去是下一次出牌选择,所以要记得当次去把当次出牌回滚回来,以此达到走到所有情况,所以有个全局的统计最小出牌次数就好了。

参考下 牛友杭电“鹏哦”的解题代码,我觉的思路很清晰:

public class getPoker {
   

    int min = Integer.MAX_VALUE;
    int[] poker;

    public int getCount(int[] arr) {
   
        poker = arr;
        backtrace(0, 0);
        return min;
    }

    public void backtrace(int n, int count) {
   
        if (n >= 10) {
   
            min = Math.min(min, count);
            return;
        }
        if (poker[n] == 0) {
   
            backtrace(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值