488. 祖瑪游戲

488. 祖瑪游戲

你正在參與祖瑪游戲的一個變種。

在這個祖瑪游戲變體中,桌面上有 一排 彩球,每個球的顏色可能是:紅色 ‘R’、黃色 ‘Y’、藍色 ‘B’、綠色 ‘G’ 或白色 ‘W’ 。你的手中也有一些彩球。

你的目標是 清空 桌面上所有的球。每一回合:

從你手上的彩球中選出 任意一顆 ,然后將其插入桌面上那一排球中:兩球之間或這一排球的任一端。
接著,如果有出現 三個或者三個以上 且 顏色相同 的球相連的話,就把它們移除掉。
如果這種移除操作同樣導致出現三個或者三個以上且顏色相同的球相連,則可以繼續移除這些球,直到不再滿足移除條件。
如果桌面上所有球都被移除,則認為你贏得本場游戲。
重復這個過程,直到你贏了游戲或者手中沒有更多的球。
給你一個字符串 board ,表示桌面上最開始的那排球。另給你一個字符串 hand ,表示手里的彩球。請你按上述操作步驟移除掉桌上所有球,計算并返回所需的 最少 球數。如果不能移除桌上所有的球,返回 -1 。

示例 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 個球就可以清空桌面。

提示:

  • 1 <= board.length <= 16
  • 1 <= hand.length <= 5
  • board 和 hand 由字符 ‘R’、‘Y’、‘B’、‘G’ 和 ‘W’ 組成
  • 桌面上一開始的球中,不會有三個及三個以上顏色相同且連著的球

解題思路

使用樸素的回溯法:每次遞歸嘗試向board的每一個位置插入hand里面的每一顆球,插入以后檢查是否能出現三個或者三個以上 且 顏色相同 的球相連的話,并且把它們移除掉。

剪枝

  1. 使用set記錄已經遞歸過的情況
  2. 一旦當前遞歸的使用的球數小于了目前得出的最小球數

代碼

class Solution {
public:int m=0x3f3f3f3f;void dfs(int cnt,string  hand,string board) {if (cnt>=m) return;if (set.count({board,cnt}))return;set.insert({board,cnt});if (board.empty()) {m=min(m,cnt);return;}if (hand.empty()) return;for (int i = 0; i < board.size(); ++i) {for (int j = 0; j < hand.size(); ++j) {char cur=hand[j];hand.erase(hand.begin()+j);string ns=board;ns.insert(ns.begin()+i,cur);handler(ns);dfs(cnt+1,hand,ns);hand.insert(hand.begin()+j,cur);}}}int findMinStep(string board, string hand) {dfs(0,hand, board);return m==0x3f3f3f3f ? -1 : m;}set<pair<string,int>> set  ;void  handler(string& s){int seq(1);for (int i = 1; i <= s.size(); ++i) {if (i<s.size()&&s[i]==s[i-1]) {seq++;continue;}if(seq>=3){s.erase(i-seq,seq);i=0;}seq=1;}}};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389838.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389838.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【黑客免殺攻防】讀書筆記14 - 面向對象逆向-虛函數、MFC逆向

虛函數存在是為了克服類型域解決方案的缺陷&#xff0c;以使程序員可以在基類里聲明一些能夠在各個派生類里重新定義的函數。 1 識別簡單的虛函數 代碼示例&#xff1a; #include "stdafx.h" #include <Windows.h>class CObj { public:CObj():m_Obj_1(0xAAAAAA…

怎么看另一個電腦端口是否通_誰一個人睡覺另一個看看夫妻的睡眠習慣

怎么看另一個電腦端口是否通In 2014, FiveThirtyEight took a survey of about 1057 respondents to get a look at the (literal) sleeping habits of the American public beyond media portrayal. Some interesting notices: first, that about 45% of all couples sleep to…

495. 提莫攻擊

495. 提莫攻擊 在《英雄聯盟》的世界中&#xff0c;有一個叫 “提莫” 的英雄。他的攻擊可以讓敵方英雄艾希&#xff08;編者注&#xff1a;寒冰射手&#xff09;進入中毒狀態。 當提莫攻擊艾希&#xff0c;艾希的中毒狀態正好持續 duration 秒。 正式地講&#xff0c;提莫在…

Java基礎之Collection和Map

List&#xff1a;實現了collection接口&#xff0c;list可以重復&#xff0c;有順序 實現方式&#xff1a;3種&#xff0c;分別為&#xff1a;ArrayList&#xff0c;LinkedList&#xff0c;Vector。 三者的比較&#xff1a; ArrayList底層是一個動態數組&#xff0c;數組是使用…

20155320《網絡對抗》Exp4 惡意代碼分析

20155320《網絡對抗》Exp4 惡意代碼分析 【系統運行監控】 使用schtasks指令監控系統運行 首先在C盤目錄下建立一個netstatlog.bat文件&#xff08;由于是系統盤&#xff0c;所以從別的盤建一個然后拷過去&#xff09;&#xff0c;用來將記錄的聯網結果格式化輸出到netstatlog.…

tableau 自定義省份_在Tableau中使用自定義圖像映射

tableau 自定義省份We have been reading about all the ways to make our vizzes in Tableau with more creativity and appeal. During my weekly practice for creating viz as part of makeovermonday2020 community, I came across geographical data which in way requir…

2055. 蠟燭之間的盤子

2055. 蠟燭之間的盤子 給你一個長桌子&#xff0c;桌子上盤子和蠟燭排成一列。給你一個下標從 0 開始的字符串 s &#xff0c;它只包含字符 ‘’ 和 ‘|’ &#xff0c;其中 ’ 表示一個 盤子 &#xff0c;’|’ 表示一支 蠟燭 。 同時給你一個下標從 0 開始的二維整數數組 q…

Template、ItemsPanel、ItemContainerStyle、ItemTemplate

原文:Template、ItemsPanel、ItemContainerStyle、ItemTemplate先來看一張圖(網上下的圖&#xff0c;加了幾個字) 實在是有夠“亂”的&#xff0c;慢慢來理一下&#xff1b; 1、Template是指控件的樣式 在WPF中所有繼承自contentcontrol類的控件都含有此屬性&#xff0c;&#…

熊貓燒香分析報告_熊貓分析進行最佳探索性數據分析

熊貓燒香分析報告目錄 (Table of Contents) Introduction 介紹 Overview 總覽 Variables 變數 Interactions 互動互動 Correlations 相關性 Missing Values 缺失值 Sample 樣品 Summary 摘要 介紹 (Introduction) There are countless ways to perform exploratory data analys…

2060. 同源字符串檢測

2060. 同源字符串檢測 原字符串由小寫字母組成&#xff0c;可以按下述步驟編碼&#xff1a; 任意將其 分割 為由若干 非空 子字符串組成的一個 序列 。 任意選擇序列中的一些元素&#xff08;也可能不選擇&#xff09;&#xff0c;然后將這些元素替換為元素各自的長度&#x…

vue中的data用return返回

為什么在大型項目中data需要使用return返回數據呢&#xff1f;答&#xff1a;不使用return包裹的數據會在項目的全局可見&#xff0c;會造成變量污染&#xff1b;使用return包裹后數據中變量只在當前組件中生效&#xff0c;不會影響其他組件。 1、在簡單的vue實例中看到的Vue實…

白褲子變粉褲子怎么辦_使用褲子構建構建數據科學的monorepo

白褲子變粉褲子怎么辦At HousingAnywhere, one of the first major obstacles we had to face when scaling the Data team was building a centralised repository that contains our ever-growing machine learning applications. Between these projects, many of them shar…

ubuntu+anaconda+tensorflow 及相關問題

配置tensorflow部分參考&#xff1a;https://blog.csdn.net/XUTIAN1129/article/details/78997633 裝完anaconda, source ~/.bashrc后, 可以直接 pip install tensorflow-gpu , 珍愛生命&#xff0c;遠離bazel。但想要c/c調用tf的時候遠離不了&#xff0c;還是得bazel編譯安裝t…

2022. 將一維數組轉變成二維數組

2022. 將一維數組轉變成二維數組 給你一個下標從 0 開始的一維整數數組 original 和兩個整數 m 和 n 。你需要使用 original 中 所有 元素創建一個 m 行 n 列的二維數組。 original 中下標從 0 到 n - 1 &#xff08;都 包含 &#xff09;的元素構成二維數組的第一行&#xf…

支持向量機SVM算法原理及應用(R)

支持向量機SVM算法原理及應用&#xff08;R&#xff09; 2016年08月17日 16:37:25 閱讀數&#xff1a;22292更多 個人分類&#xff1a; 數據挖掘實戰應用版權聲明&#xff1a;本文為博主原創文章&#xff0c;轉載請注明來源。 https://blog.csdn.net/csqazwsxedc/article/detai…

mad離群值_全部關于離群值

mad離群值An outlier is a data point in a data set that is distant from all other observations. A data point that lies outside the overall distribution of the dataset. Or in a layman term, we can say, an outlier is something that behaves differently from th…

2057. 值相等的最小索引

2057. 值相等的最小索引 給你一個下標從 0 開始的整數數組 nums &#xff0c;返回 nums 中滿足 i mod 10 nums[i] 的最小下標 i &#xff1b;如果不存在這樣的下標&#xff0c;返回 -1 。 x mod y 表示 x 除以 y 的 余數 。 示例 1&#xff1a;輸入&#xff1a;nums [0,1,2…

SpringBoot中各配置文件的優先級及加載順序

我們在寫程序的時候會碰到各種環境(開發、測試、生產)&#xff0c;因而&#xff0c;在我們切換環境的時候&#xff0c;我們需要手工切換配置文件的內容。這大大的加大了運維人員的負擔&#xff0c;同時會帶來一定的安全隱患。 為此&#xff0c;為了能更合理地重寫各屬性的值&am…

青年報告_了解青年的情緒

青年報告Youth-led media is any effort created, planned, implemented, and reflected upon by young people in the form of media, including websites, newspapers, television shows, and publications. Such platforms connect writers, artists, and photographers in …

post提交參數過多時,取消Tomcat對 post長度限制

1.Tomcat 默認的post參數的最大大小為2M&#xff0c; 當超過時將會出錯&#xff0c;可以配置maxPostSize參數來改變大小。 從 apache-tomcat-7.0.63 開始&#xff0c;參數 maxPostSize 的含義就變了&#xff1a; 如果將值設置為 0&#xff0c;表示 POST 最大值為 0&#xff0c;…