419. 甲板上的战舰 - 力扣(LeetCode) (leetcode-cn.com)
Day1 419.甲板上的战舰
本解法为变量扫描解法
官方还有第二种解法 不过没看懂 …
尝试理解官方答案并加注释
(然而等我加完注释理解完已经是第二天了)
其他笔记
- enumerate(iterable, start=0)
Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.
Example:
seasons = ['Spring', 'Summer', 'Fall', 'Winter']list(enumerate(seasons))[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
list(enumerate(seasons, start=1))[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]Equivalent to:
Equivalent to:
def enumerate(sequence, start=0):n = startfor elem in sequence:yield n, elemn += 1
示例代码块
list_01 = ["零", "一", "二", "三", "四"]list_02 = list(enumerate(list_01))list_03 = dict(enumerate(list_01))print(list_02)print(list_03) # 这个写法不规范
# 控制台输出结果[(0, '零'), (1, '一'), (2, '二'), (3, '三'), (4, '四')]{0: '零', 1: '一', 2: '二', 3: '三', 4: '四'}
列表嵌套列表 转 列表 :
# 将列表套列表套字典转换为列表套字典list_end = sum(list_end, [])
列表嵌套元组 转 列表 :
# 将列表套元组套字典转换为列表套字典list_end = [(1,), (2,), (3,)]list_end = sum(list_end, ())# (1, 2, 3)
题解代码
# coding:utf-8class Solution:def countBattlenships(self, borad):ans = 0m, n =len(borad), len(borad[0])for i, row in enumerate(borad):for j, ch in enumerate(row):if ch == 'X':row[j] = '.'for k in range(j + 1, n):if row[k] != 'X':breakrow[k] = '.'for k in range(i + 1, m):if borad[k][j] != 'X':breakborad[k][j] = '.'ans += 1return ans
class Solution: def countBattleships(self, board: List[List[str]]) -> int: ans = 0 m, n = len(board), len(board[0]) # 获取甲板的长度和宽度 for i, row in enumerate(board): # 将甲板的 元素 和 序号 进行转换,即变成一个 伪字典类型 ,然后将其值赋予 i, row for j, ch in enumerate(row): # 对甲板的每一行进行循环 if ch == 'X': # 如果这层为战舰,则进行下面的逻辑 row[j] = '.' # 设置起点为空位 for k in range(j + 1, n): # 寻找横向是否有战舰,并且在寻找到 '.' 的时候,打破循环(即为战舰尾部) 进行记录 if row[k] != 'X': break row[k] = '.' # 找到则替换为空位 for k in range(i + 1, m): # 寻找纵向是否有战舰,并且在寻找到 '.' 的时候,打破循环(即为战舰尾部) if board[k][j] != 'X': break board[k][j] = '.' # 找到则替换为空位 ans += 1 # 战舰寻找完毕 记录数字 +1 return ans
