Leetcode 999. 车的可用捕获量 C++

问题描述:在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”,“B” 和 “p” 给出。大写字符表示白棋,小写字符表示黑棋。

车按国际象棋中的规则移动:它选择四个基本方向中的一个(北,东,西和南),然后朝那个方向移动,直到它选择停止、到达棋盘的边缘或移动到同一方格来捕获该方格上颜色相反的卒。另外,车不能与其他友方(白色)象进入同一个方格。

返回车能够在一次移动中捕获到的卒的数量。

class Solution {
public:
	int onedirection(vector<vector<char>>& board, int i, int j, char dir) {//从(i,j)向dir这个方向出发,寻找p
		if (dir == 'u') {
			while (j > 0) {
				j--;
				if (board[i][j] == 'p') { return 1; }
				if (board[i][j] == 'B') { return 0; }
			}
			return 0;
		}
		if (dir == 'd') {
			while (j < 7) {
				j++;
				if (board[i][j] == 'p') { return 1; }
				if (board[i][j] == 'B') { return 0; }
			}
			return 0;
		}
		if (dir == 'l') {
			while (i > 0) {
				i--;
				if (board[i][j] == 'p') { return 1; }
				if (board[i][j] == 'B') { return 0; }
			}
			return 0;
		}
		if (dir == 'r') {
			while (i < 7) {
				i++;
				if (board[i][j] == 'p') { return 1; }
				if (board[i][j] == 'B') { return 0; }
			}
			return 0;
		}
		return -1;//因为要保证必须有一个return, 否则编译不能通过
	}
	int numRookCaptures(vector<vector<char>>& board) {
		int res = 0;
		int i, j;
		for (i = 0; i < 8; i++) {
			for (j = 0; j < 8; j++) {
				if (board[i][j] == 'R') {//寻找R
					res += onedirection(board, i, j, 'u');
					res += onedirection(board, i, j, 'd');
					res += onedirection(board, i, j, 'l');
					res += onedirection(board, i, j, 'r');
					return res;
				}
			}
		}
		return -1;//因为要保证必须有一个return, 否则编译不能通过
	}

};

  Leetcode 999. 车的可用捕获量 C++

上一篇:sqlserver复制订阅(发布订阅)读库改为写库用(订阅库改为主库用)


下一篇:程序设计原则:把计算过程交给计算机