你正在參與祖瑪遊戲的乙個變種。
在這個祖瑪遊戲變體中,桌面上有 一排 彩球,每個球的顏色可能是:紅色 'r'、黃色 'y'、藍色 'b'、綠色 'g' 或白色 'w' 。你的手中也有一些彩球。
你的目標是 清空 桌面上所有的球。每一回合:
從你手上的彩球中選出 任意一顆 ,然後將其插入桌面上那一排球中:兩球之間或這一排球的任一端。
接著,如果有出現 三個或者三個以上 且 顏色相同 的球相連的話,就把它們移除掉。
如果這種移除操作同樣導致出現三個或者三個以上且顏色相同的球相連,則可以繼續移除這些球,直到不再滿足移除條件。
如果桌面上所有球都被移除,則認為你贏得本場遊戲。
重複這個過程,直到你贏了遊戲或者手中沒有更多的球。
給你乙個字串 board ,表示桌面上最開始的那排球。另給你乙個字串 hand ,表示手裡的彩球。請你按上述操作步驟移除掉桌上所有球,計算並返回所需的 最少 球數。如果不能移除桌上所有的球,返回 -1 。
dfs求解過程:
1class
solution
1920
//將pos位置的小球加入
21if (!st.empty() && st.top().first ==board[pos])
24else
2728
if (st.top().second >= 3
) 36
else
52else
5556
if (st.top().second >= 3)
62else
6566
//還原現場
67if (st.top().second >j)
70else
73 used -=j;
74 rem[ch] +=j;75}
76}7778 st.push(tmp); //
還原現場79}
80}8182
//插入與當前位置同色的小球
83if (rem[board[pos]] >= 1 && (pos + 1 == board.size() || board[pos + 1] !=board[pos]))
96else
99100
//還原現場
101 st.top().second -=i;
102 used -=i;
103 rem[board[pos]] +=i;
104}
105}
106107
//不額外插入小球的情形
108//
1. 當前顏色小球不滿三個
109//
2. 當前顏色小球滿三個,但當前小球和下一小球同色,這說明初始情形為xx...xx,之後中間的小球被消去,從而形成了***x,這種情況是允許的。
110if (st.top().second < 3 || (st.top().second == 3 && pos + 1
< board.size() && board[pos] == board[pos + 1
]))111 dfs(pos + 1
, board);
112113
//還原現場
114if (st.top().second == 1
) 117
else
120}
121public
:122
int findminstep(string board, string
hand)
135};
136137
138int main(void
)139
488 祖瑪遊戲
回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...
Leetcode 488 祖瑪遊戲
回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...
Leetcode 488 祖瑪遊戲
回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...