題目
還需要你前往力扣官網查看詳細的題目要求 地址
1.給定一個 8 x 8 的棋盤,只有一個 白色的車,用字符 'R' 表示。棋盤上還可能存在白色的象 'B' 以及黑色的卒 'p'。空方塊用字符 '.' 表示。2.車可以按水平或豎直方向(上,下,左,右)移動任意個方格直到它遇到另一個棋子或棋盤的邊界。如果它能夠在一次移動中移動到棋子的方格,則能夠 吃掉 棋子。3.注意:車不能穿過其它棋子,比如象和卒。這意味著如果有其它棋子擋住了路徑,車就不能夠吃掉棋子。4.返回白車將能 吃掉 的 卒的數量。
思路
- 先找到R的位置
- 根據R[0]的位置找到 橫向的 B 和 p的 index
- 根據R[1]的位置找到 豎向的 B 和 p的 index
- 然后 橫向的 數組合并, 并根據合并后數組找到find的位置(index),查詢index-1和index+1是否在橫向的p里面
- 然后 豎向的 數組合并, 并根據合并后數組找到find的位置(index),查詢index-1和index+1是否在豎向的p里面
代碼
let arr = [[".", ".", ".", ".", ".", ".", ".", "."],[".", ".", ".", "p", ".", ".", ".", "."],[".", ".", ".", "R", ".", ".", ".", "p"],[".", ".", ".", ".", ".", ".", ".", "."],[".", ".", ".", ".", ".", ".", ".", "."],[".", ".", ".", "p", ".", ".", ".", "."],[".", ".", ".", ".", ".", ".", ".", "."],[".", ".", ".", ".", ".", ".", ".", "."],];var numRookCaptures = function (board) {let R = []; // 車let heng = {B: [], // 象p: [], // 卒};let shu = {B: [],p: [],};R[0] = board.findIndex((item) => item.includes("R"));R[1] = board[R[0]].indexOf("R");heng.B = board[R[0]].map((item, index) => {if (item === "B") {return index;}});heng.p = board[R[0]].map((item, index) => {if (item === "p") {return index;}});shu.B = board.map((item, index) => {if (item[R[1]] === "B") {return index;}});shu.p = board.map((item, index) => {if (item[R[1]] === "p") {return index;}});let numberHeng = sortList(heng.B, heng.p, R[1]);let numberShu = sortList(shu.B, shu.p, R[0]);return numberHeng + numberShu;};function sortList(arrOne, arrTwo, find) {let number = 0;let arr = [...arrOne, ...arrTwo, find].sort((a, b) => {return a - b;});let index = arr.indexOf(find);if (arrTwo.includes(arr[index - 1]) && arr[index - 1] !== undefined) {number = number + 1;}if (arrTwo.includes(arr[index + 1]) && arr[index + 1] !== undefined) {number = number + 1;}return number;}console.log(numRookCaptures(arr));