博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣题解| 999. 可以被一步捕获的棋子数
阅读量:2439 次
发布时间:2019-05-10

本文共 969 字,大约阅读时间需要 3 分钟。

难度简单72收藏分享切换为英文关注反馈

在一个 8 x 8 的棋盘上,有一个白色的车(Rook),用字符 'R' 表示。棋盘上还可能存在空方块,白色的象(Bishop)以及黑色的卒(pawn),分别用字符 '.''B' 和 'p' 表示。不难看出,大写字符表示的是白棋,小写字符表示的是黑棋。

车按国际象棋中的规则移动。东,西,南,北四个基本方向任选其一,然后一直向选定的方向移动,直到满足下列四个条件之一:

  • 棋手选择主动停下来。
  • 棋子因到达棋盘的边缘而停下。
  • 棋子移动到某一方格来捕获位于该方格上敌方(黑色)的卒,停在该方格内。
  • 车不能进入/越过已经放有其他友方棋子(白色的象)的方格,停在友方棋子前。

你现在可以控制车移动一次,请你统计有多少敌方的卒处于你的捕获范围内(即,可以被一步捕获的棋子数)。

解法:

class Solution {    public int numRookCaptures(char[][] board) {    	//定义上下左右四个方向    	int[] dx = {-1,1,0,0};    	int[] dy = {0,0,-1,1};    	for(int i =0;i<8;i++) {    		for (int j = 0; j < 8; j++) {    			//找到白色车的位置坐标				if (board[i][j] == 'R') {					//分别判断上下左右四个方向					int res = 0;					for (int k = 0; k < 4; k++) {						int x=i, y=j;						while (true) {							x +=dx[k];							y +=dy[k];							if (x<0 || x >=8 || y<0 || y>=8 || board[x][y] == 'B') {								break;							}							if (board[x][y] == 'p') {								res++;								break;							}						}					}					return res;				}			}    	}    	    	return 0;    }}

 

转载地址:http://rfuqb.baihongyu.com/

你可能感兴趣的文章
Linux办公一条龙之电子表格Calc(转)
查看>>
在NETBSD上配置ADSL+IPF+IPNAT(转)
查看>>
Windows 98 使用维护向导(转)
查看>>
用win2000收发传真(转)
查看>>
Linux办公一条龙之初识OpenOffice(转)
查看>>
Linux上安装GCC编译器过程(转)
查看>>
使用Windows XP 的任务计划(转)
查看>>
Linux分区工具的使用方法(转)
查看>>
深入理解硬盘的Linux分区(转)
查看>>
循序渐进教你LINUX之软件配置方法(转)
查看>>
NetBSD 指导手册(转)
查看>>
打造FreeBSD桌面系统(2)(转)
查看>>
为你的 Windows 98 加把锁(转)
查看>>
Windows 98 资源管理(转)
查看>>
认识 Windows 98 备份(转)
查看>>
Windows 98 禁止注册表检查器自动运行(转)
查看>>
Windows 98 注册表大修改(转)
查看>>
Windows 98 给回收站右键菜单增加重命名命令(转)
查看>>
科学的清理 Windows 98 注册表(转)
查看>>
Windows 98 桌面主题和用户管理(转)
查看>>