zoukankan      html  css  js  c++  java
  • Leetcode-999 Available Captures for Rook(车的可用捕获量)

    作者水平有限,所发仅为个人愚见,如有明显谬误,望斧正

    这是一道随便搞搞就能过的模拟题,看到的时候我没有想太多,直接搜过去了——先找到白车位置,然后东南西北四个方向看一下离白车最近的是己方还是敌方棋子,己方棋子就跳出循环,敌方棋子让结果变量cnt自增1以后跳出循环。cnt只有可能是{0,1,2,3,4}中的一个数。之所以敢这么做的原因是board是一个标准的国际象棋board,长宽必定都是8,所以复杂度可以说是O(1)的,最坏的情况的搜索数必定小于4*8次。

     1 #define pb push_back
     2 #define maxSize 3939
     3 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
     4 
     5 class Solution
     6 {
     7     public:
     8         bool islimited(vector<vector<char>>& board,int x,int y)
     9         {
    10             if(x>=0&&x<8&&y>=0&&y<8&&board[x][y]!='B')
    11                 return true;
    12             return false;
    13         }
    14         int numRookCaptures(vector<vector<char>>& board)
    15         {
    16             int x,y;
    17             _for(i,0,8)
    18                 _for(j,0,8)
    19                     if(board[i][j]=='R')
    20                     {
    21                         x = i;
    22                         y = j;
    23                         break;
    24                     }
    25             
    26             int cnt = 0;
    27             for(int i = x-1;islimited(board,i,y);i --)
    28             {
    29                 if(board[i][y]=='p')
    30                 {
    31                     cnt ++;
    32                     break;
    33                 }
    34             }
    35             
    36             for(int i = x+1;islimited(board,i,y);i ++)
    37             {
    38                 if(board[i][y]=='p')
    39                 {
    40                     cnt ++;
    41                     break;
    42                 }
    43             }
    44             
    45             for(int i = y-1;islimited(board,x,i);i --)
    46             {
    47                 if(board[x][i]=='p')
    48                 {
    49                     cnt ++;
    50                     break;
    51                 }
    52             }
    53             
    54             for(int i = y+1;islimited(board,x,i);i ++)
    55             {
    56                 if(board[x][i]=='p')
    57                 {
    58                     cnt ++;
    59                     break;
    60                 }
    61             }
    62             return cnt;
    63         }
    64 };
    Leetcode-999(C++)

     执行用时:8ms

  • 相关阅读:
    Visual Studio Code 上java开发环境搭建
    c++编译时打印宏定义
    git使用
    Let's Encrypt申请证书及使用
    使用docker创建aosp编译环境
    项目中使用protobuf 3.0
    ubuntu14.04 安装mono
    ubuntu14.04 安装apache+mysql+php
    Discuz & UCenter 修改手记
    代码细节重构:请对我的代码指手划脚(四)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/10427919.html
Copyright © 2011-2022 走看看