描述给定一个二维棋盘,计算其中有多少艘战舰。战列舰用“X”表示,空位用“.”表示。您可以假设以下规则:您收到一个有效的棋盘,由战舰或空槽组成。战舰只能水平或垂直放置。换句话说,它们只能由1xN(1行,N列)或Nx1(N行,1列)的形状组成,其中N可以是任意大小。两艘战列舰之间至少有一个水平或垂直单元隔开-没有相邻的战列舰。示例:X..X...X...X在上面的棋盘中有2艘战列舰。无效的示例:...XXXXX...X这是一个无效的棋盘,您将不会收到-作为战列舰之间总是有一个单元格分隔。跟进:你能一次性完成吗,只使用O(1)额外内存并且不修改板的值?描述给定一个二维的甲板,请计算其中有多少舰战舰。战舰用'X'表示,空位用'.'表示。您需要遵守以下规则:您将获得一个有效的甲板,该甲板仅由船舶或空位组成。战列舰只能水平或垂直放置。换句话说,船只只能由1xN(1行,N列)或Nx1(N行,1列)组成,其中N可以是任意大小。两艘船之间至少有一个水平或垂直间隙——即没有相邻的船。示例:X..X...X...X在上层甲板上有2艘船。无效示例:...XXXXX...X您不会收到这样的无效甲板-因为船舶之间至少有一个空间将它们隔开。进阶:你能用一次性算法解决这个问题,只使用O(1)的额外空间,而且不修改deck的值吗?来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode网络所有。商业转载请联系官方授权,非商业转载请注明出处。横向连接的“X”组成战舰,纵向连接的“X”组成战舰。并且没有战列舰横竖交错。对于每艘船,计算它的第一个“X”。如果一个“X”的左边或上面有一个“X”,那么它不是这艘船的第一个“X”,忽略。只统计某个位置为“X”且其左边和上边不为“X”的位置的个数。#-*-coding:utf-8-*-#@Author:HeRui#@CreateDate:2019-11-1621:22:05#@LastModifiedby:HeRui#@LastModifiedtime:2019-11-1621:36:25从键入importListclass解决方案:defcountBattleships(self,board:List[List[str]])->int:如果不是board:返回0count,row,col=0,len(board),len(board[0])foriinrange(row):forjinrange(col):ifboard[i][j]==".":continueifi>0andboard[i-1][j]=="X":continueifj>0andboard[i][j-1]=="X":continuecount+=1#下面的写法是正向思维,等价于上面的写法method,思路就是下面的思路,把代码简化成上面的#ifi>0andj>0:#ifboard[i][j]=="X"andboard[i][j-1]=="."andboard[i-1][j]==".":#count+=1#elifi==0andj==0:#ifboard[i][j]=="X":#count+=1#elifi==0:#ifboard[i][j]=="X"andboard[i][j-1]==".":#count+=1#elifj==0:#ifboard[i][j]=="X"andboard[i-1][j]==".":#count+=1返回计数源代码文件在这里?
