488. 祖玛游戏

回忆一下祖玛游戏。现在桌上有一串球,颜色有红色®,黄色(Y),蓝色(B),绿色(G),还有白色(W)。 现在你手里也有几个球。

每一次,你可以从手里的球选一个,然后把这个球插入到一串球中的某个位置上(包括最左端,最右端)。接着,如果有出现三个或者三个以上颜色相同的球相连的话,就把它们移除掉。重复这一步骤直到桌上所有的球都被移除。

找到插入并可以移除掉桌上所有球所需的最少的球数。如果不能移除桌上所有的球,输出 -1 。

示例:
输入: “WRRBBW”, “RB”
输出: -1
解释: WRRBBW -> WRR[R]BBW -> WBBW -> WBB[B]W -> WW (翻译者标注:手上球已经用完,桌上还剩两个球无法消除,返回-1)

输入: “WWRRBBWW”, “WRBRW”
输出: 2
解释: WWRRBBWW -> WWRR[R]BBWW -> WWBBWW -> WWBB[B]WW -> WWWW -> empty

输入:“G”, “GGGGG”
输出: 2
解释: G -> G[G] -> GG[G] -> empty

输入: “RBYYBBRRB”, “YRBGB”
输出: 3
解释: RBYYBBRRB -> RBYY[Y]BBRRB -> RBBBRRB -> RRRB -> B -> B[B] -> BB[B] -> empty
标注:

你可以假设桌上一开始的球中,不会有三个及三个以上颜色相同且连着的球。
桌上的球不会超过20个,输入的数据中代表这些球的字符串的名字是 “board” 。
你手中的球不会超过5个,输入的数据中代表这些球的字符串的名字是 “hand”。
输入的两个字符串均为非空字符串,且只包含字符 ‘R’,‘Y’,‘B’,‘G’,‘W’。

class Solution {int DFS(String board,Map<Character,Integer> num){if(board.length()==0) return 0;int ans = 0x3f3f3f3f,l = board.length(),need,i,j;for(i = 0;i < l;i = j){j = i + 1;while(j < l && board.charAt(j) == board.charAt(i)) j++;need = 3 - (j - i);//当前位置要满足三个球消除需要几个额外的。if(need <= num.get(board.charAt(i))){need = Math.max(0,need);//可能存在有连续消除的情况。此时need为负数。例如WWWWnum.put(board.charAt(i),num.get(board.charAt(i))-need);String subStr = board.substring(0,i) + board.substring(j);int cnt = DFS(subStr,num);if(cnt >= 0)ans = Math.min(ans , need + cnt);num.put(board.charAt(i), num.get(board.charAt(i))+need);}}if(ans == 0x3f3f3f3f) return -1;else return ans;    }int findMinStep(String board, String hand) {Map <Character,Integer> num = new HashMap<Character,Integer>();//这里要定义charnum.put('R', 0);num.put('Y', 0);num.put('B', 0);num.put('G', 0);num.put('W', 0);int l = hand.length();for(int i = 0;i < l;i++){num.put(hand.charAt(i), num.get(hand.charAt(i))+1);}return DFS(board,num);}
}

Java实现 LeetCode 488 祖玛游戏相关推荐

  1. Leetcode 488.祖玛游戏

    祖玛游戏 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色(R),黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一串球中 ...

  2. LeetCode 488. 祖玛游戏

    题目描述 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色(R),黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一串球中 ...

  3. LeetCode每日一题488. 祖玛游戏

    488. 祖玛游戏 你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也 ...

  4. LeetCode 力扣每日一题 488.祖玛游戏

    题目描述: 你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也有一些彩 ...

  5. 力扣解题思路:488. 祖玛游戏

    488. 祖玛游戏 思路: 实际上就是简单的消消乐,如果时间允许,最简单的暴力递归法也是可以的,就是把所有字母插入所有的位置,取最短且可以消去的插入球数即可.但是这样无脑插入是很浪费时间的,所以我们在 ...

  6. ​LeetCode-每日一题 488. 祖玛游戏 [Java实现]

    你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也有一些彩球. 你的目 ...

  7. Java实现 LeetCode 55 跳跃游戏

    55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] ...

  8. 【Java】LeetCode 174. 地下城游戏 —— 困难

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

  9. 488 祖玛游戏 python

    没有找到这个题比较好的Java题解 class Solution:def findMinStep(self, board: str, hand: str) -> int:def remove(b ...

最新文章

  1. k8s集群部署一(最新版docker安装)
  2. 使用FFmpeg进行视频抽取音频,之后进行语音识别转为文字
  3. c语言多维数组指针地址讲解,C语言入门之多维数组的指针变量
  4. muduo网络库学习(五)服务器监听类Acceptor及Tcp连接TcpConnection的建立与关闭
  5. c#与access建立连接用作登录_组态王与Access数据库的数据交换
  6. 磁铁还能用来爬铁墙?简直惊呆了
  7. JAVA获取Classpath根路径的方法
  8. 旋转数组 java_数组中左旋转的Java程序
  9. 让你不富都难的28个理财习惯
  10. Tomcat优化之配置NIO运行模式
  11. PAIP.彩票系统的对外接口流程实录
  12. 汪文君高并发编程总结-第一阶段
  13. python爬取网页美文网文章内容
  14. gre填空高频词汇整理
  15. C语言实训心得体会(精选4篇)
  16. kettle 9.1 连接hadoop clusters (CDH 6.2)
  17. html改变鼠标指针形状代码,改变鼠标指针形状_js改变鼠标形状与样式的方法
  18. 浏览器主页进来是hao123
  19. 想象力无限,人工智能时代你对AGV有什么期许
  20. 分数化小数计算机在线,循环小数化分数计算器

热门文章

  1. Verilog时序逻辑硬件建模设计(四)移位寄存器
  2. 以连边为中心的功能连接用于个体识别
  3. 复杂网络2012年度盘点:博弈+传播+控制
  4. 男女通用的城府修练 城府不是有心眼,而是成熟
  5. 【SAP】PP模块术语
  6. java中的日历_Java中的日历功能
  7. deinterlace 隔行 progressive 逐行 3:2pulldown
  8. 战地之王服务器维护启动失败,《战地之王》战地之王韩服官方各种问题攻略
  9. 假设一个类,继承了父类并且实现了一个接口,然后父类和接口有一个同名的方法,那么此时会发生什么情况,编译会提示出错吗?如果不出错,那么这到底算是重写还是实现接口方法?
  10. X87 FPU 指令集