首页 > 其他分享 >[LeetCode]999. 可以被一步捕获的棋子数

[LeetCode]999. 可以被一步捕获的棋子数

时间:2024-08-24 15:47:57浏览次数:5  
标签:吃掉 rooks int 999 棋子 board position LeetCode

  1. 可以被一步捕获的棋子数
    简单

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

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

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

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

示例 1:

输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","R",".",".",".","p"],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:3
解释:
在本例中,车能够吃掉所有的卒。
示例 2:

输入:[[".",".",".",".",".",".",".","."],[".","p","p","p","p","p",".","."],[".","p","p","B","p","p",".","."],[".","p","B","R","B","p",".","."],[".","p","p","B","p","p",".","."],[".","p","p","p","p","p",".","."],[".",".",".",".",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:0
解释:
象阻止了车吃掉任何卒。
示例 3:

输入:[[".",".",".",".",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".","p",".",".",".","."],["p","p",".","R",".","p","B","."],[".",".",".",".",".",".",".","."],[".",".",".","B",".",".",".","."],[".",".",".","p",".",".",".","."],[".",".",".",".",".",".",".","."]]
输出:3
解释:
车可以吃掉位置 b5,d6 和 f5 的卒。

class Solution {
public:
    int numRookCaptures(vector<vector<char>>& board) {
        //首先只有一个白色车为'R',另有白色象'B',和黑色卒'p' 空方块为'.'.棋盘为8*8.首先找到车'r'的位置,然后判断车的四个方向内第一个非空白块和边界的位置的棋子是否为卒。若为卒则加1
        if(!board.size()) 
            return 0;
        if(!board[0].size()) 
            return 0;
            int rooks_position_i=0;
            int rooks_position_j=0;
            int  Pieces_count=0;
        for(unsigned int i=0;i<board.size();i++){
            for(unsigned int j=0;j<board[0].size();j++){//行数为高
                if(board[i][j]=='R'){
                    rooks_position_i=i;
                    rooks_position_j=j;
                    // printf("i:%d,j:%d/n",i,j);
                    break;
                }
            }
        }
            
            for( int j=rooks_position_j+1;j<board[rooks_position_i].size();j++){//行数为高j遍历
                if(board[rooks_position_i][j]!='.'){
                    if(board[rooks_position_i][j]=='p'){
                        //  printf("rooks_position_i:%d,j:%d/n",rooks_position_i, j);
                        Pieces_count++;
                        break;
                    }
                    else 
                        break;
                }       
        }
        if(rooks_position_j>0)
        for( int j=rooks_position_j-1;j>=0;j--){//行数为高j遍历
                if(board[rooks_position_i][j]!='.'){
                    if(board[rooks_position_i][j]=='p'){
                        //   printf("rooks_position_i:%d,j:%d/n",rooks_position_i, j);
                        Pieces_count++;
                        break;
                    }
                    else 
                        break;
                }       
        }
            if(rooks_position_i>0)
           for( int i=rooks_position_i-1;i>=0;i--){//列数为宽i遍历
           if(board[i][rooks_position_j]!='.') 
               {
                    if(board[i][rooks_position_j]=='p'){
                        //   printf("rooks_position_j:%d,i:%d/n",rooks_position_j, i);
                        Pieces_count++;
                        break;
                    }
                        
                    else 
                        break;
                }       
        }
        
        for( int i=rooks_position_i+1;i<board.size();i++){////列数为宽i遍历
                if(board[i][rooks_position_j]!='.'){
                    if(board[i][rooks_position_j]=='p'){
                                            //   printf("rooks_position_j:%d,i:%d/n",rooks_position_j, i);
                        Pieces_count++;
                        break;
                    }
                    else 
                        break;
                }       
        }
        return Pieces_count;

    }
};

标签:吃掉,rooks,int,999,棋子,board,position,LeetCode
From: https://www.cnblogs.com/AmyMoJianJun/p/18377848

相关文章

  • LeetCode之链表类题目
    链表类题目之CPP版......
  • LeetCode-Python-1650. 二叉树的最近公共祖先 III
    给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA)。每个节点都包含其父节点的引用(指针)。Node 的定义如下:classNode{publicintval;publicNodeleft;publicNoderight;publicNodeparent;}根据维基百科中对最近公共祖先节点......
  • 【LeetCode面试150】——36有效的数独
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • 【LeetCode面试150】——3无重复数组的最长子串
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • LeetCode84(柱状图中最大的矩形)理解单调栈
    1.LeetCode84(柱状图中最大的矩形)给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示例2:输入......
  • 代码随想录算法训练营第 51 天 |LeetCode99岛屿数量 LeetCode100.岛屿的最大面积
    代码随想录算法训练营Day51代码随想录算法训练营第51天|LeetCode99岛屿数量LeetCode100.岛屿的最大面积目录代码随想录算法训练营前言LeetCode200岛屿数量LCR105.岛屿的最大面积一、广度优先搜索基础1、用队列实现2、代码框架:二、卡码网99岛屿数量(LeetCode......
  • 代码随想录算法训练营第 49 天 |LeetCode42 接雨水 LeetCode84 柱状图中最大面积矩形
    代码随想录算法训练营Day49代码随想录算法训练营第49天|LeetCode42接雨水LeetCode84柱状图中最大面积矩形目录代码随想录算法训练营前言LeetCode42接雨水LeetCode84柱状图中最大面积矩形一、LeetCode42接雨水1.题目链接2.思路3.题解二、LeetCode84柱状......
  • 代码随想录算法训练营第 48 天 |LeetCode 739. 每日温度 LeetCode496.下一个更大元素
    代码随想录算法训练营Day48代码随想录算法训练营第48天|LeetCode739.每日温度LeetCode496.下一个更大元素ILeetCode503.下一个更大元素II目录代码随想录算法训练营前言LeetCode739.每日温度LeetCode496.下一个更大元素ILeetCode503.下一个更大元素II一......
  • 24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,33
    目录198.打家劫舍题目描述题解213.打家劫舍II题目描述题解337.打家劫舍III题目描述题解打家劫舍的一天......
  • 存在重复元素 II(LeetCode)
    题目        给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i]==nums[j] 且 abs(i-j)<=k 。如果存在,返回 true ;否则,返回 false 。解题"""时间复杂度为O(n),空间复杂度为O(min(n,k)),其中n......