文章目录

  • 1. 题目
  • 2. 思路
    • (1) DFS+记忆化搜索
  • 3. 代码

1. 题目


2. 思路

(1) DFS+记忆化搜索

  • 过于复杂,建议背诵默写。

3. 代码

import java.util.HashMap;
import java.util.Map;public class Test {public static void main(String[] args) {}
}class Solution {private static final int MAX = 0x3F3F3F3F;public int findMinStep(String board, String hand) {//1<<hand.length:所有球的使用情况,初始都是未使用,用0表示int ans = memoization(board, hand, new HashMap<>(), 1 << hand.length());return ans == MAX ? -1 : ans;}private int memoization(String board, String hand, Map<String, Integer> cache, int cur) {if (board.length() == 0) return 0;if (cache.containsKey(board)) return cache.get(board);int ans = MAX;//遍历手中的所有球for (int i = 0; i < hand.length(); i++) {//如果当前球已经用过,则不再使用if (((cur >> i) & 1) == 1) continue;//当前球没有被用过,使用当前球发射,状态压缩标记为已经使用int next = (1 << i) | cur;//枚举所有插入位置for (int j = 0; j <= board.length(); j++) {//剪枝,对于RRWW来说,手中的球如果是R,插入第一个位置和第二个位置的情况是一样的if (j > 0 && j < board.length() - 1 && board.charAt(j) == board.charAt(j - 1)) continue;//剪枝,如果选出的球的颜色和插入的球的颜色不相同,没必要进行下去,即便产生连续消除也需要有至少两个同色,比如board=RRWWR,hand=W,W只能插入在W附近才有意义,如果是RRWR,无论W插在哪都没有意义if (j > 0 && j < board.length() - 1 && board.charAt(j) != hand.charAt(i)) continue;//curBoard记录插入当前球后的情况StringBuilder curBoard = new StringBuilder();curBoard.append(board, 0, j).append(hand.charAt(i));if (j != board.length()) curBoard.append(board.substring(j));//双指针进行消除相同颜色的球,StringBuilder是引用传递,不需要使用返回结果进行更新eliminateSameColor(curBoard, j);ans = Math.min(ans, memoization(curBoard.toString(), hand, cache, next) + 1);}}cache.put(board, ans);return ans;}private void eliminateSameColor(StringBuilder curBoard, int i) {//从i位置进行扩散消除while (i >= 0 && i < curBoard.length()) {int left = i, right = i;char c = curBoard.charAt(i);while (left >= 0 && curBoard.charAt(left) == c) {left--;}while (right < curBoard.length() && curBoard.charAt(right) == c) {right++;}//如果有3个或者以上相同色的球,就进行消除if (right - left > 3) {curBoard.delete(left + 1, right);i = left >= 0 ? left : right;} else {break;}}}
}

2021.11.09 - 144.祖玛游戏相关推荐

  1. 牛客小月赛 j-洋灰三角 2021.11.09

    在这里插入图片描述 运用算法:矩阵乘法,乘法逆元. 学习矩阵乘法+乘法逆元就 可以ac本题 解题代码

  2. 2021/11/07-2021/11/11

    # -*- coding = utf-8 -*- # @Time:2021/11/7 16:09 # @Author:zhangchuhan # @File:demo01.py # @Software ...

  3. 【跃迁之路】【636天】程序员高效学习方法论探索系列(实验阶段393-2018.11.09)...

    @(收集箱(每日一记,每周六整理))专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) ...

  4. 【不忘初心】Win10_LTSC2021_19044.1381_X64_可更新[纯净精简版][2.52G](2021.11.20)

    此版可正常更新补丁,母版来自UUP WIN10_LTSC2021 19044.1288集成补丁到19044.1381为了保证稳定初心的系统全部都是离线精简和优化,非二次封装.系统纯净.流畅.进程少无任 ...

  5. 2021-11-09祖玛游戏

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

  6. android+祖玛游戏源码,unity祖玛游戏Zuma Ball Blast源码

    压缩包内容概览: unity祖玛游戏Zuma Ball src ; 汇编C锐器编辑器 ; 汇编-C夏普编辑器 ; 组件-C夏普vs ; C夏普组件 ; 汇编统一脚本vs ; 汇编统一体脚本 ; 资产 ...

  7. 【不忘初心】Windows11 22000.318 X64 四合一[纯净精简版][2.62G](2021.11.10)

    此版可正常更新补丁,WIN11全新的UI界面出炉!可以说这一次Windows 11全新升级,无论是从Logo上还是UI界面设计,都有很大的变化,母版来自UUP WIN11_22000.318,为了保证 ...

  8. 史上最详细微信小程序授权登录与后端SprIngBoot交互操作说明,附源代码,有疑惑大家可以直接留言,蟹蟹 2021.11.29完善更新小程序代码,

    2021.11.29 更新文章 你好,我是博主宁在春,一起学习吧!!! 写这篇文章的原因,主要是因为最近在写毕业设计,用到了小程序,这中间曲曲折折,一言难尽啊.毕业设计真的让人麻脑阔

  9. Daily Report 2012/11/09 陈伯雄(step 9)

    今天的工作是完成把之前建立的倒排索引和数据库搜索匹配模块嵌入到主体工程中,等待运行和测试. 但是,现在的数据库搜索方法精度还不够,天真把每个关键词一视同仁地处理了,这样的后果可能回造成用户搜索体验不佳 ...

最新文章

  1. spss相关性分析看结果_利用spss做Pearson相关性分析步骤详解
  2. Hadoop学习笔记系列文章导航
  3. zookeeper理解
  4. servlet3.0新特性_查看Servlet 3.0的新增功能
  5. LC和RC滤波电路分析
  6. 计算机二级ms office知识点讲解,全国计算机二级MSOffice复习知识点
  7. .net java 开源_为什么说微软开源 .net 也拼不过 java?
  8. 1018. 可被 5 整除的二进制前缀
  9. pmp 第六版 模拟卷3疑难问题
  10. paip.手机电话本备份导入到pc管理attilax总结
  11. Chrome OS 初体验
  12. 计算机1级考试试题ps,2016年计算机等级考试一级ps模拟练习题及答案
  13. Maven基础概念和安装配置教程
  14. 菜鸟学网站开发入门之(一)—— html 入门
  15. C++ Primer Plus习题及答案-第五章
  16. Android第三方框架之学习高德地图SDK-----①集成环境,获取定位信息,地图显示。
  17. JS获取浏览器类型和版本信息
  18. Cesium实时目标跟踪最新特效教程系列1—实时发亮直线跟踪移动目标
  19. 金融行业案例 | 未来智安XDR助力银行业客户优化安全运营体系,有效提高告警研判率
  20. 2013搜狗校招研发类C/C++试题

热门文章

  1. 运行OpenCV编写的函数时提示“应用程序无法正常启动(0xC000001b)”的解决办法
  2. GLES2.0中文API-glViewport
  3. 智慧校园,突破信息化管理困境
  4. 宗地从上到下从左到右西北角顺时针界址点编码、宗地界址点成果表、宗地四至情况说明、宗地四至(东西南北)提取、界址线走向说明
  5. RAMOS系统简介及制作
  6. LeetCode 799. 香槟塔(DP动态规划)
  7. 同花顺python_小白学 Python 爬虫(25):爬取股票信息
  8. 蓝桥杯Java真题01--振兴中华
  9. 我,33岁,字节跳动测试工程师,2月无情被辞,想给划水的兄弟提个醒
  10. linux系统查看系统内核位置,Linux如何查看系统已安装内核