Leetcode PHP題解--D74 999. Available Captures for Rook

D74 999. Available Captures for Rook

題目連接

999. Available Captures for Rookphp

題目分析

在國際象棋中,「車」能夠橫向或豎向移動任意格子。數組

給定表明棋盤格子的二維數組,出現的大寫字母表明白方,小寫表明黑方。.表明空白格子。.net

返回白色車只走一次棋,有多少種吃法。code

思路

先從二維數組中找到白色車R。再往四個方向遍歷。leetcode

在逐方向遍歷時,遇到.時跳過,判斷下一個格子。get

若是遇到同爲大寫字母時,即遇到己方棋子時,中止遍歷。io

若是遇到小寫字母時,可吃棋子數+1,並中止遍歷。function

如此遍歷四個方向,最終返回可吃棋子數量便可。class

最終代碼

<?php
class Solution {

    /**
     * @param String[][] $board
     * @return Integer
     */
    function numRookCaptures($board) {
        //首先要找到R
        $rowNum = -1;
        $colNum = -1;
        foreach($board as $rowNum => $row){
            $colNum = array_search('R',$row);
            if($colNum !== false){
                break;
            }
        }
        if($colNum===-1){
            return 0;
        }
        $captureable = 0;
        //找到後往四個方向搜索
        for($j=$colNum-1; $j>=0; $j--){
            if($board[$rowNum][$j] == '.'){
                continue;
            }
            if(strtoupper($board[$rowNum][$j]) == $board[$rowNum][$j]){
                break;
            }
            if(strtolower($board[$rowNum][$j]) == $board[$rowNum][$j]){
                $captureable++;
                break;
            }
        }
        for($j=$colNum+1; $j<8; $j++){
            if($board[$rowNum][$j] == '.'){
                continue;
            }
            if(strtoupper($board[$rowNum][$j]) == $board[$rowNum][$j]){
                break;
            }
            if(strtolower($board[$rowNum][$j]) == $board[$rowNum][$j]){
                $captureable++;
                break;
            }
        }
        for($i=$rowNum+1; $i<8; $i++){
            if($board[$i][$colNum] == '.'){
                continue;
            }
            if(strtoupper($board[$i][$colNum]) == $board[$i][$colNum]){
                break;
            }
            if(strtolower($board[$i][$colNum]) == $board[$i][$colNum]){
                $captureable++;
                break;
            }
        }
        for($i=$rowNum-1; $i>=0; $i--){
            if($board[$i][$colNum] == '.'){
                continue;
            }
            if(strtoupper($board[$i][$colNum]) == $board[$i][$colNum]){
                break;
            }
            if(strtolower($board[$i][$colNum]) == $board[$i][$colNum]){
                $captureable++;
                break;
            }
        }
        return $captureable;
    }
}

若以爲本文章對你有用,歡迎用愛發電資助。foreach

相關文章
相關標籤/搜索