LeetCode每日一题488. 祖玛游戏
488. 祖玛游戏
你正在参与祖玛游戏的一个变种。
在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 ‘R’、黄色 ‘Y’、蓝色 ‘B’、绿色 ‘G’ 或白色 ‘W’ 。你的手中也有一些彩球。
你的目标是 清空 桌面上所有的球。每一回合:
从你手上的彩球中选出 任意一颗 ,然后将其插入桌面上那一排球中:两球之间或这一排球的任一端。
接着,如果有出现 三个或者三个以上 且 颜色相同 的球相连的话,就把它们移除掉。
如果这种移除操作同样导致出现三个或者三个以上且颜色相同的球相连,则可以继续移除这些球,直到不再满足移除条件。
如果桌面上所有球都被移除,则认为你赢得本场游戏。
重复这个过程,直到你赢了游戏或者手中没有更多的球。
给你一个字符串 board ,表示桌面上最开始的那排球。另给你一个字符串 hand ,表示手里的彩球。请你按上述操作步骤移除掉桌上所有球,计算并返回所需的 最少 球数。如果不能移除桌上所有的球,返回 -1 。
1 <= board.length <= 16
1 <= hand.length <= 5
board 和 hand 由字符 ‘R’、‘Y’、‘B’、‘G’ 和 ‘W’ 组成
桌面上一开始的球中,不会有三个及三个以上颜色相同且连着的球
示例1:
输入:board = “WRRBBW”, hand = “RB”
输出:-1
解释:无法移除桌面上的所有球。可以得到的最好局面是:
· 插入一个 ‘R’ ,使桌面变为 WRRRBBW 。WRRRBBW -> WBBW
· 插入一个 ‘B’ ,使桌面变为 WBBBW 。WBBBW -> WW
桌面上还剩着球,没有其他球可以插入。
示例2:
输入:board = “WWRRBBWW”, hand = “WRBRW”
输出:2
解释:要想清空桌面上的球,可以按下述步骤:
· 插入一个 ‘R’ ,使桌面变为 WWRRRBBWW 。WWRRRBBWW -> WWBBWW
· 插入一个 ‘B’ ,使桌面变为 WWBBBWW 。WWBBBWW -> WWWW -> empty
只需从手中出 2 个球就可以清空桌面。
示例3:
输入:board = “G”, hand = “GGGGG”
输出:2
解释:要想清空桌面上的球,可以按下述步骤:
· 插入一个 ‘G’ ,使桌面变为 GG 。
· 插入一个 ‘G’ ,使桌面变为 GGG 。GGG -> empty
只需从手中出 2 个球就可以清空桌面。
示例4:
输入:board = “RBYYBBRRB”, hand = “YRBGB”
输出:3
解释:要想清空桌面上的球,可以按下述步骤:
· 插入一个 ‘Y’ ,使桌面变为 RBYYYBBRRB 。RBYYYBBRRB -> RBBBRRB -> RRRB -> B
· 插入一个 ‘B’ ,使桌面变为 BB 。
· 插入一个 ‘B’ ,使桌面变为 BBB 。BBB -> empty
只需从手中出 3 个球就可以清空桌面。
代码:
class Solution {final int MAXSCORE = 6;Map<String, Integer> map = new HashMap<>();public int findMinStep(String board, String hand) {if (backtrack(new StringBuilder(board), new StringBuilder(hand)) == MAXSCORE)return -1;return map.get(board + "," + hand);}private int backtrack(StringBuilder board, StringBuilder hand) {int score = MAXSCORE;if (board.length() == 0)return score;String status = board + "," + hand;if (map.containsKey(status))return map.get(status);for (int i = 0; i < hand.length(); i++) {for (int j = 0; j < board.length(); j++) {board.insert(j, hand.charAt(i));String newBoard = recur(board.toString());if (newBoard.length() == 0) {map.put(status, 1);return 1;}hand.deleteCharAt(i);score = Math.min(score, backtrack(new StringBuilder(newBoard), hand) + 1);hand.insert(i, board.charAt(j));board.deleteCharAt(j);}}map.put(status, score);return score;}String recur(String board) {int len = board.length();for (int l = 0, r = 0; r <= len; r++) {if (r < len && board.charAt(l) == board.charAt(r))continue;if (r - l > 2)return recur(board.substring(0, l) + board.substring(r));elsel = r;}return board;}
}
执行结果:
总结: LeetCode打卡第十四天,通过每天做题可以看到自己的不足,提升自己的能力,在做题中慢慢进步,但是代码编程能力还有待提高,还需要继续加油!
LeetCode每日一题488. 祖玛游戏相关推荐
- LeetCode 力扣每日一题 488.祖玛游戏
题目描述: 你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也有一些彩 ...
- LeetCode-每日一题 488. 祖玛游戏 [Java实现]
你正在参与祖玛游戏的一个变种. 在这个祖玛游戏变体中,桌面上有 一排 彩球,每个球的颜色可能是:红色 'R'.黄色 'Y'.蓝色 'B'.绿色 'G' 或白色 'W' .你的手中也有一些彩球. 你的目 ...
- [算法]LeetCode每日一题--174. 地下城游戏(Java)
DailyChallenge 174. 地下城游戏 Hard20200712 Description 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格. ...
- leetcode每日一题2029. 石子游戏 IX 博弈相对论 不战而屈人之兵
- 【LeetCode每日一题】810. 黑板异或游戏
[LeetCode每日一题]810. 黑板异或游戏 题目: 黑板上写着一个非负整数数组 nums[i] .Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手.如果擦除一个数字后,剩余的 ...
- Java实现 LeetCode 488 祖玛游戏
488. 祖玛游戏 回忆一下祖玛游戏.现在桌上有一串球,颜色有红色®,黄色(Y),蓝色(B),绿色(G),还有白色(W). 现在你手里也有几个球. 每一次,你可以从手里的球选一个,然后把这个球插入到一 ...
- Leetcode每日一题——思路小记
文章目录 LeetCode每日一题 golang T15 2020.6.12 三数之和,双指针的运用 T70 2020.6.13 斐波那契数列 T1014 2020.6.17 最佳观光:双指针,计算公 ...
- leetcode每日刷题计划-简单篇day8
leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...
- Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
思路:就是168题的反命题,进制的方式完美解决: Leetcode每日一题:168.excel-sheet-column-title(Excel表名称) class Solution {public: ...
最新文章
- U3D 打包时找不到tag的问题
- JavaScript程序开发(十五)—函数的属性和方法
- WSDM 2022 | 合约广告自适应统一分配框架
- 漂亮的个人团队介绍网页模板
- java二维码小试牛刀
- python百度语音实时识别成文字_python 上传百度语音识别+文字返回结果
- 应用层安全协议Kerberos
- Flutter之RenderView RenderObject ParentData知识点梳理
- python3视频教程哪个好_python3入门视频教程
- 室内设计——别墅设计方案(包含预览图jpg和.psd文件)
- 4、LED1602液晶模组介绍及其编程使用
- css音乐播放器插件,jQuery MPlayer音乐播放器插件
- WEB前端经典笔试/面试题
- ideaIU-2017.3.4安装破解图文教程详细步骤
- 东方时尚驾校学习心得
- canvas自定义多边形
- HYSBZ 3991 寻宝游戏
- 2017——小米——句子反转
- Policy Gradient (PG)与Proximal Policy Optimization (PPO)算法详解
- 桌面上打开计算机有延迟感觉,电脑中右击操作反应慢如何解决|解决右键菜单弹出延迟的方法...