一、Problem
小明被劫持到X賭城,被迫與其他3人玩牌。一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。
這時,小明腦子裏突然冒出一個問題:如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裏能拿到的初始牌型組合一共有多少種呢?
請填寫該整數,不要填寫任何多餘的內容或說明文字。
3598180
二、Solution
題意:不計較花色的意思是:當有兩個排列 和 ,如果 和 都是 2,即使 和 的花色不同,都算一種組合… 😂
方法一:dfs
- 每種牌都有 4 種選擇,比如:一張不拿,拿一張、拿兩張、拿三張、拿四張。
- 至於一張不拿,k++ 的解釋是:一張不拿,就跳過這種牌了…
- 只要最後滿足,牌數 c 以及牌種類 k 都等於 13 就算一種方案…
- 可選的方案有二:
- 方案一:13 重循環,每重循環從 0-4, 的總和爲 13 算一種方案。
- 方案二:遞歸記錄每一種牌的數量以及當前牌的種類…🤦♂️
import java.util.*;
import java.io.*;
public class Main{
static class Solution {
int res;
void dfs(int c, int k) {
if (c > 13 || k > 13)
return;
if (c == 13 && k == 13) {
res++;
return;
}
for (int i = 0; i <= 4; i++)
dfs(c+i, k+1);
}
void init() {
dfs(0, 0);
System.out.println(res);
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,