【Leetcode 每日一题】999. 可以被一步捕获的棋子数

问题背景

给定一个 8 × 8 8 \times 8 8×8 的棋盘,只有一个 白色的车,用字符 'R' 表示。棋盘上还可能存在白色的象 'B' 以及黑色的卒 'p'。空方块用字符 '.' 表示。

车可以按水平或竖直方向(上,下,左,右)移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移动到棋子的方格,则能够 吃掉 棋子。

注意:车不能穿过其它棋子,比如象和卒。这意味着如果有其它棋子挡住了路径,车就不能够吃掉棋子。

返回白车将能 吃掉卒的数量

数据约束

  • b o a r d . l e n g t h = 8 board.length = 8 board.length=8
  • b o a r d [ i ] . l e n g t h = 8 board[i].length = 8 board[i].length=8
  • b o a r d [ i ] [ j ] board[i][j] board[i][j]可以是 'R','.','B' 或 'p'
  • 只有一个格子上存在 b o a r d [ i ] [ j ] board[i][j] board[i][j]为 'R'

解题过程

因为只存在一个车,所以没必要递归了,直接把它找出来判断所有可能情形就可以了。

自己写的乱七八糟,主要是没想到实际上遇到任何其它棋子都不用继续循环,还得多练。

具体实现

java 复制代码
class Solution {

    private static final int SIZE = 8;
    private static final int[][] DIRECTIONS = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};

    public int numRookCaptures(char[][] board) {
        // 遍历整个矩阵找到车
        int x0 = 0, y0 = 0;
        for(int i = 0; i < SIZE; i++) {
            for(int j = 0; j < SIZE; j++) {
                if(board[i][j] == 'R') {
                    x0 = i;
                    y0 = j;
                }
            }
        }
        int res = 0;
        // 根据方向查找
        for(int[] direction : DIRECTIONS) {
            int x = x0 + direction[0];
            int y = y0 + direction[1];
            // 遇到任何其它棋子,都不会再有符合条件的结果,board[x][y] == '.' 可以写条件里
            while(0 <= x && x < SIZE && 0 <= y && y < SIZE && board[x][y] == '.') {
                x += direction[0];
                y += direction[1];
            }
            if(0 <= x && x < SIZE && 0 <= y && y < SIZE && board[x][y] == 'p') {
                res++;
            }
        }
        return res;
    }
}
相关推荐
jz_ddk19 分钟前
[科普] AI加速器架构全景图:从GPU到光计算的算力革命
人工智能·学习·算法·架构
曦月逸霜34 分钟前
内部排序算法总结(考研向)
考研·算法·排序算法
仪器科学与传感技术博士1 小时前
Matplotlib库:Python数据可视化的基石,发现它的美
开发语言·人工智能·python·算法·信息可视化·matplotlib·图表可视化
success2 小时前
【爆刷力扣-二叉树】层次遍历
算法
2501_924880704 小时前
手机拍照识别中模糊场景准确率↑37%:陌讯动态适配算法实战解析
人工智能·深度学习·算法·计算机视觉·智能手机·视觉检测
Hx__4 小时前
Redis中String数据结构为什么以长度44为embstr和raw实现的分界线?
数据结构·数据库·redis
lifallen5 小时前
HBase的异步WAL性能优化:RingBuffer的奥秘
大数据·数据库·分布式·算法·性能优化·apache·hbase
星期天要睡觉5 小时前
机器学习——支持向量机(SVM)实战案例
笔记·算法·支持向量机
Skylar_.6 小时前
嵌入式 - 数据结构:哈希表和排序与查找算法
数据结构·算法·嵌入式·哈希算法·散列表
破刺不会编程6 小时前
linux信号量和日志
java·linux·运维·前端·算法