Leetcode 488 祖瑪遊戲

2021-09-24 14:50:05 字數 1984 閱讀 4363

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

題目希望我們用最少的球來消掉桌上所有的球,如果不能完全消掉,返回-1。

我們使用雜湊表來統計手中每種球的個數。

然後我們遍歷桌上的球,我們找連續相同球的個數,在沒有可以消除的情況下,連續的個數只能是1個或2個,然後我們用3減去連續個數,就是我們需要補充的球數以使其可以被消除,那麼我們在雜湊表表中看我們手中的該型別的球夠不夠,如果夠就表示可以消除,我們在雜湊表中減去需要使用掉的球數,然後將消掉的球移除。

然後對新的字串呼叫遞迴,如果可以成功消除,會返回乙個結果,該結果加上之前需要的球數用來更新結果res,注意呼叫完遞迴要恢復雜湊表的狀態(backtrack)。

time complexity: o(n) space complexity: o(n)

1

class

solution

9int result = backtrack(board + "#", handcount);

10//

11return result == maxcount ? -1: result;12}

1314

private

int backtrack(string s, int

h) 28 i =j;29}

30return

rs;31}32

//remove consecutive balls longer than 3

33private

string removeconsecutive(string board)

40return

board;41}

42 }

Leetcode 488 祖瑪遊戲

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

LeetCode 488 祖瑪遊戲

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

488 祖瑪遊戲

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