419. 甲板上的战舰 - 力扣(LeetCode) (leetcode-cn.com)
Day1 419.甲板上的战舰
本解法为变量扫描解法
官方还有第二种解法 不过没看懂 …

尝试理解官方答案并加注释
(然而等我加完注释理解完已经是第二天了)
2021-12-19_001955.png

其他笔记

  1. 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:

  1. seasons = ['Spring', 'Summer', 'Fall', 'Winter']
  2. list(enumerate(seasons))
  3. [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
  1. list(enumerate(seasons, start=1))
  2. [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
  3. Equivalent to:

Equivalent to:

  1. def enumerate(sequence, start=0):
  2. n = start
  3. for elem in sequence:
  4. yield n, elem
  5. n += 1

示例代码块

  1. list_01 = ["零", "一", "二", "三", "四"]
  2. list_02 = list(enumerate(list_01))
  3. list_03 = dict(enumerate(list_01))
  4. print(list_02)
  5. print(list_03) # 这个写法不规范
  1. # 控制台输出结果
  2. [(0, '零'), (1, '一'), (2, '二'), (3, '三'), (4, '四')]
  3. {0: '零', 1: '一', 2: '二', 3: '三', 4: '四'}
  1. 列表嵌套列表 转 列表 :

    1. # 将列表套列表套字典转换为列表套字典
    2. list_end = sum(list_end, [])
  2. 列表嵌套元组 转 列表 :

    1. # 将列表套元组套字典转换为列表套字典
    2. list_end = [(1,), (2,), (3,)]
    3. list_end = sum(list_end, ())
    4. # (1, 2, 3)
  3. 题解代码

    1. # coding:utf-8
    2. class Solution:
    3. def countBattlenships(self, borad):
    4. ans = 0
    5. m, n =len(borad), len(borad[0])
    6. for i, row in enumerate(borad):
    7. for j, ch in enumerate(row):
    8. if ch == 'X':
    9. row[j] = '.'
    10. for k in range(j + 1, n):
    11. if row[k] != 'X':
    12. break
    13. row[k] = '.'
    14. for k in range(i + 1, m):
    15. if borad[k][j] != 'X':
    16. break
    17. borad[k][j] = '.'
    18. ans += 1
    19. return 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