可能在公司业务代码写的恶心了需要看看清新的内容,看了下昨天阿里校招实习的题目,题目内容:
(看别人解题逻辑来启发自己,代码是别人的,思路是我总结的)
有一叠扑克牌,每张牌介于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(