回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色(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)
private int backtrack(string s, int h)
i = j;
}return rs;
}//remove consecutive balls longer than 3
private string removeconsecutive(string board)
return board;}}
Leetcode 488 祖瑪遊戲
回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...
LeetCode 488 祖瑪遊戲
題目描述 回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步...
488 祖瑪遊戲
回憶一下祖瑪遊戲。現在桌上有一串球,顏色有紅色 r 黃色 y 藍色 b 綠色 g 還有白色 w 現在你手裡也有幾個球。每一次,你可以從手裡的球選乙個,然後把這個球插入到一串球中的某個位置上 包括最左端,最右端 接著,如果有出現三個或者三個以上顏色相同的球相連的話,就把它們移除掉。重複這一步驟直到桌上...