解决思想
考虑的数据结构为图的深度优先遍历,可以把每一类牌看成图的一个节点一共有13个节点,每个节点可以访问0,1,2,3,4次,一共有这4中可能。一共最多遍历到第13次就结束。
public class Main {
//已经选择棋牌的数目
static int sum = 0;
//共有num种选择
static int num = 0;
//采用深度优先遍历算法,把牌分成了13类,每一类就是一个容器,每个容器4张牌
//n是第n种牌,一种就是一类。
static void dfs(int n) {
if(sum > 13)
return;
if(n == 14) {
if(sum == 13) {
num++;
}
} else {
//一类牌有0,1,2,3,4这5种选择故循环不大于5
for (int i = 0; i < 5; i++) {
sum += i;
dfs(n + 1);
sum -= i;
}
}
}
public static void main(String[] args) {
//从第1种牌开始,这样可以包括所有类型
dfs(1);
System.out.println(num);
}
}