牛客上的字节题
题目如下
- 总共有36张牌,每张牌是1~9。每个数字4张牌。
- 你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌
- 14张牌中有2张相同数字的牌,称为雀头。
- 除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)
能组合成刻子就组合成刻子,组合不成了,就把后面的x+1,x+2也给减去了
并且要求用数组去做,从1-9索引去遍历,而不是用去map再排序
题解如下
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String[] num = s.split(" ");
int[] array = new int[9];
int[] helpArray = new int[9];
for (int i = 0; i < num.length; i++) {
array[Integer.parseInt(num[i])-1]++ ;
}
// 开始加数据
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 9; i++) {
if (array[i-1]<4){
System.arraycopy(array,0,helpArray,0,9);
//给这个地方加了数据了
helpArray[i-1]++;
if (canHu(helpArray,14,false)){
// 这个数据可以加进来
list.add(i);
}
}else {
// 不能加了
}
}
if (list.isEmpty()){
System.out.println(0);
}else {
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
if (i!=list.size()-1){
System.out.print(" ");
}
}
}
}
/**
* 回溯去判断 一个个减去
* @param helpArray
* @param total 到0的时候可以推出去了
* @param hasHead
* @return
*/
private static boolean canHu(int[] helpArray, int total, boolean hasHead) {
if (total==0){
// 成功
return true;
}
if (!hasHead){
// 先找两个头
for (int i = 0; i < helpArray.length; i++) {
if (helpArray[i]>=2){
// 可以当头
helpArray[i]-=2;
if (canHu(helpArray,total-2,true)){
return true;
}
helpArray[i]+=2;
}
}
}else {
// 有头了
// 和牌
for (int i = 0; i < helpArray.length; i++) {
if (helpArray[i]>=3){
// 组合成刻子
helpArray[i]-=3;
if (canHu(helpArray,total-3,true)) {
return true;
}
helpArray[i]+=3;
}
// 不能用else 因为需要是否能够刻子和顺子都判断一次
if (i<7){
// 7 8 9 最大
if (helpArray[i]>0&&helpArray[i+1]>0&&helpArray[i+2]>0){
// 把它们三个组合成顺子
helpArray[i]--;
helpArray[i+1]--;
helpArray[i+2]--;
if (canHu(helpArray,total-3,true)){
return true;
}
helpArray[i]++;
helpArray[i+1]++;
helpArray[i+2]++;
}
}
}
}
return false;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!