每种牌编一个id,麻将中共34种牌(编号从0-33)因此需要至少6位空间。手牌14张也就是146=84位。要保存和牌的全部组合约1700万种需要约841700*10000=175MB存储。
显然这种方式需要的内存太大,不适合应用。
为了判断手牌是否胡牌,牌本身是1万,4万等等都不重要。只要知道像123一样的数字是否连续,只要有某牌个数就足够了。因此,首先对手牌进行分组,规则为将连续的牌分成一组(1万,2万,3万,5万,6万,7万就可分为两组「123」,「567」),将每个分组以个数的形式来表示,可以减少组合的数量。具体的例子如下:
「123」→「111」 「567」→「111」 「111」→「3」 「333」→「3」 「234456」→「11211」
为了完整的表示手牌,可以将不相连的分组中间用0相连,这样就可以将多个不相连的分组用一串数字进行表示了,如以上的例子,两个分组「123」,「567」就可以表示为「1110111」;
无混验和参考文档:http://hp.vector.co.jp/authors/VA046927/mjscore/mjalgorism.html