999. Available Captures for Rook

class Solution:
    def calcu(self,ele:List[str],loc):
        index_p = [-1]*2 #只记录离R最近位置的p和B(左右)
        index_B = [-1]*2
        left,right = 0,0
        for i in range(len(ele)):
            if ele[i] is 'p':
                if i < loc:
                    index_p[0]=i #左边的取最大值
                else:
                    if index_p[1]<0:index_p[1] = i #右边的取最小值
            elif ele[i] is 'B':
                if i<loc:
                    index_B[0]=i
                else:
                    if index_B[1]<0:index_B[1]=i
                    
        p0,p1,b0,b1 = index_p[0],index_p[1],index_B[0],index_B[1] #使用简便的符号标记,方便书写
        if p0>=0:#p在R的左边
            if b0>=0: #B在R的左边,有值
                if p0<loc and b0<p0:
                    left = 1
            else: #B左边没有值
                if p0<loc:
                    left = 1
        if p1>=0:#p在R的右边
            if b1>=0:#B在R的右边,有值
                if p1>loc and b1>p1:
                    right = 1
            else:#B右边没有值
                if p1>loc:
                    right = 1
                
        return left,right
                
    def numRookCaptures(self, board: List[List[str]]) -> int:
        index_R_row = 0 
        index_R_col = 0
        count = 0
        col = []
        row = []
        for a in board:
            index_R_row += 1
            if 'R' in a:
                for i in range(len(a)):
                    if a[i]=='R':
                        index_R_col = i
                        col = [x[i] for x in board]
                        row = a
                        break
                break
                
        
        r1,r2 = self.calcu(row,index_R_col)
        r3,r4 = self.calcu(col,index_R_row-1)
        count = r1+r2+r3+r4
        return count

  40ms,13M

my god,写这个代码花了我半天时间,估计以后都不想看第二遍了。。。。。

posted @ 2019-02-27 14:53  bluedream1000  阅读(182)  评论(0编辑  收藏  举报