撲克牌順子-不用排序,只需要boolean[5]很小的內(nèi)存空間,遍歷一次數(shù)組即可
撲克牌順子
http://www.fangfengwang8.cn/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4
//解題思路 /* array數(shù)組解釋:數(shù)組索引表示順子的第幾張牌,如array[1] = true表示順子的第二張牌找到了 遍歷所有數(shù)字: 1.數(shù)字為0則king++,如果king > 3直接返回true,因為有4或5個王一定能組成順子 2.數(shù)字不為0 2.1先執(zhí)行array[number % 5] == true,判斷這張牌是否已經(jīng)找到了或兩張牌是否相差5 2.1.1是則直接返回false,因為有重復的牌或者存在兩張相差5的牌都不可能組成順子 2.1.2否則執(zhí)行array[number % 5] = true表示找到了順子的其中一張牌,缺牌數(shù)lack-- 2.2統(tǒng)計最大值max和最小值min,如果max - min > 4直接返回false,因為順子的第一張牌和最后一張牌一定不會大于4 3.如果王牌數(shù)king等于缺牌數(shù)lack則返回true,否則返回false */ public boolean IsContinuous(int [] numbers) { int king = 0;//記錄王牌的個數(shù) int lack = 5;//記錄缺少的牌數(shù) int min = 14; int max = 0; boolean[] array = new boolean[5]; for (int number : numbers) { if (number == 0) { king++; if (king > 3) return true;//有4或5個王一定能組成順子 } else { if (array[number % 5] == true) return false;//有重復的牌 else{ array[number % 5] = true; lack--; } if (number < min) min = number; else if (number > max) max = number; if (max - min > 4) return false; } } if (lack != king) return false; return true; }