撲克牌的所有組合實現


代碼地址

git地址:https://coding.net/u/mich/p/easytry/git/tree/master/src/com/card

背景

身邊朋友在做棋牌,所以就自己嘗試了用java來實現查看手上一副撲克牌可以有多少種排列組合(只是按照出牌的思路,並不是最優解,可補充)。

實例

話不多說,先看看最后的調用以及實現結果,由於數據組合太多,就不一一截圖了

   public static void main(String[] args) {
        Cards cards = new Cards();
        cards.setCards(new int[]{1, 2, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 11, 12});
        List<HandCards> allHands = new ExtractUtil().extract(cards);
        for (HandCards allHand : allHands) {
            System.out.println(allHand.getHandCards());
        }
    }

 

主要思路

先將手上的牌正序排序,從最小那張牌開始,尋找所有包含這張牌的組合,獲取之后(最差就是只有這一張,所以一定是可以提取出的)將這組合放到一個隊列中,將剩下的牌繼續提取,直至沒有手牌。代碼實現的主要思路還是遞歸。(再次聲明,此方法不是最優解,只是提供一種思路和方式)

 

主要由以下幾部分組成:

  1. 牌Cards
  2. 手牌HandCards
  3. 牌組合接口IExtract(通過接口將符合組合的所有結果提取出來,更利於以后調整)
  4. 結構ExtractResult

目錄結構如下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM