LeetCode 488 祖瑪遊戲

2021-10-16 23:09:34 字數 1197 閱讀 1447

題目描述

回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色(r),黃色(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'。

演算法(dfs)

我們先將手中的球用雜湊表來儲存一下,然後看桌上的球能否在雜湊表裡的球新增後消除,然後消除後遞迴處理剩下的。中間記錄需要的球數,用來更新需要球數的最小值。如果最小值超出了手中球的個數,則無法消除。

時間複雜度分析:桌上的球不會超過20個,手中的球不會超過5個,所以時間複雜度為o(m+n).

c++ **

class solution

return board;

}int dfs(string board, unordered_map&hash)

i=j;

}return rs;

}int findminstep(string board, string hand)

};

Leetcode 488 祖瑪遊戲

回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...

Leetcode 488 祖瑪遊戲

回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...

488 祖瑪遊戲

回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...