999. 車的可用捕獲量

解題思路

解法一:暴力窮舉

先找出車所在的行與列,然后分四個方向遍歷尋找,分三種情況:
1)要么當(dāng)遇到象則退出本方向循環(huán)湿痢;
2)要么遇到第一個卒時霍骄,計數(shù)加一台囱,然后退出本方向的循環(huán);
3)要么到棋盤邊緣也沒遇到卒读整,則退出本次循環(huán)簿训。
最后返回總個數(shù)即可。
復(fù)雜度分析
時間復(fù)雜度:O(n^2),其中 n 是棋盤的邊長强品。找白色車在棋盤中的位置需要 O(n^2)的時間復(fù)雜度膘侮,模擬車在四個方向上捕獲顏色相反的卒需要 O(n) 的時間復(fù)雜度,所以一共需要 O(n^2+n) = O(n^2) 的時間復(fù)雜度的榛。

空間復(fù)雜度:O(1)琼了,只需要常數(shù)空間存放若干變量。

解法二:深度優(yōu)先搜索DFS

先找出車所在的行與列夫晌,然后分四個方向?qū)ζ溥M行深度搜索雕薪。
1)如果已經(jīng)到達棋盤邊緣,則返回晓淀;
1)如果碰到象所袁,則返回;
2)如果碰到一個卒要糊,計數(shù)加一纲熏,然后返回;
3)否則繼續(xù)沿當(dāng)前方向進行深度搜索锄俄,直到滿足以上三個返回條件之一局劲。
最后統(tǒng)計總個數(shù)即可。

代碼

解法一:暴力窮舉

class Solution:
    def numRookCaptures(self, board: List[List[str]]) -> int:
        m = len(board)
        n = len(board[0])
        a, b = 0, 0
        for i in range(m):
            for j in range(n):
                if board[i][j] == 'R':
                    a = i
                    b = j
                    break
        count = 0
        for k in range(b,-1,-1):
            if board[a][k] == 'B':
                break
            if board[a][k] == 'p':
                count += 1
                break
        for k in range(b,n):
            if board[a][k] == 'B':
                break
            if board[a][k] == 'p':
                count += 1
                break
        for t in range(a,-1,-1):       
            if board[t][b] == 'B':
                break
            if board[t][b] == 'p':
                count += 1
                break
        for t in range(a,m):      
            if board[t][b] == 'B':
                break
            if board[t][b] == 'p':
                count += 1
                break
        return count

解法二:深度優(yōu)先搜索DFS

代碼1

class Solution:
    def numRookCaptures(self, board: List[List[str]]) -> int:
        self.ans = 0
        def dfs(i, j, dx, dy):
            if i < 0 or i >= 8 or j < 0 or j >= 8: return
            if board[i][j] == 'B': return
            if board[i][j] == 'p':
                self.ans += 1
                return
            dfs(i + dx, j + dy, dx, dy)

        for i in range(8):
            for j in range(8):
                if board[i][j] == 'R':
                    dfs(i + 1, j, 1, 0)
                    dfs(i - 1, j, -1, 0)
                    dfs(i, j + 1, 0, 1)
                    dfs(i, j - 1, 0, -1)
        return self.ans

代碼2

class Solution:
    def numRookCaptures(self, board: List[List[str]]) -> int:
        m = len(board)
        n = len(board[0])
        def dfs(i, j, dx, dy):
            count = 0
            if (i<0 or i>=8 or j<0 or j>=8):
                return count
            if board[i][j]=='B':
                return count
            if board[i][j]=='p':
                count = 1
                return count
            count += dfs(i+dx, j+dy, dx, dy)
            return count
  
        num = 0
        for i in range(m):
            for j in range(n):
                if board[i][j]=="R":
                    num += dfs(i, j+1, 0, 1)
                    num += dfs(i, j-1, 0, -1)
                    num += dfs(i+1, j, 1, 0)
                    num += dfs(i-1, j, -1, 0)
        return num
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奶赠,一起剝皮案震驚了整個濱河市鱼填,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毅戈,老刑警劉巖苹丸,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苇经,居然都是意外死亡赘理,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門扇单,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商模,“玉大人,你說我怎么就攤上這事蜘澜∈┝鳎” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵鄙信,是天一觀的道長瞪醋。 經(jīng)常有香客問我,道長装诡,這世上最難降的妖魔是什么银受? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任践盼,我火速辦了婚禮,結(jié)果婚禮上蚓土,老公的妹妹穿的比我還像新娘宏侍。我一直安慰自己,他們只是感情好蜀漆,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布谅河。 她就那樣靜靜地躺著,像睡著了一般确丢。 火紅的嫁衣襯著肌膚如雪绷耍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天鲜侥,我揣著相機與錄音褂始,去河邊找鬼。 笑死描函,一個胖子當(dāng)著我的面吹牛崎苗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舀寓,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼胆数,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了互墓?” 一聲冷哼從身側(cè)響起必尼,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篡撵,沒想到半個月后判莉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡育谬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年券盅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膛檀。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡锰镀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宿刮,到底是詐尸還是另有隱情互站,我是刑警寧澤私蕾,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布僵缺,位于F島的核電站,受9級特大地震影響踩叭,放射性物質(zhì)發(fā)生泄漏磕潮。R本人自食惡果不足惜翠胰,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望自脯。 院中可真熱鬧之景,春花似錦、人聲如沸膏潮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焕参。三九已至轻纪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叠纷,已是汗流浹背刻帚。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涩嚣,地道東北人崇众。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像航厚,于是被迫代替她去往敵國和親顷歌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 題目:車的可用捕獲量 在一個 8 x 8 的棋盤上阶淘,有一個白色車(rook)衙吩。也可能有空方塊,白色的象(bisho...
    軟飯王閱讀 83評論 0 0
  • 車的可用捕獲量 題目 在一個 8 x 8 的棋盤上溪窒,有一個白色車(rook)坤塞。也可能有空方塊,白色的象(bisho...
    飲酒醉回憶閱讀 168評論 0 0
  • 更多精彩內(nèi)容澈蚌,請關(guān)注【力扣簡單題】摹芙。 題目 難度:★★★☆☆類型:幾何,二維數(shù)組 在一個 8 x 8 的棋盤上宛瞄,有...
    玖月晴閱讀 248評論 0 0
  • 題目 在一個 8 x 8 的棋盤上浮禾,有一個白色車(rook)。也可能有空方塊份汗,白色的象(bishop)和黑色的卒(...
    suoxd123閱讀 231評論 0 0
  • 最近學(xué)了下python的定制類相關(guān)盈电,發(fā)現(xiàn)可以封裝類進行鏈?zhǔn)秸{(diào)用,于是對Log類進行了封裝 代碼中使用了兩個hand...
    _luka_閱讀 1,863評論 0 1