Программа курса:
Разбор задачи: Линкоры на доске
Предложенный нами код решения:
def countBattleships(board):
"""
:type board: List[List[str]]
:rtype: int
"""
count = 0
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 'X':
# Условие, чтобы текущая клетка была началом корабля
if (i == 0 or board[i-1][j] != 'X') and (j == 0 or board[i][j-1] != 'X'):
count += 1
return countПошаговый разбор кода
def countBattleships(board):
"""
:type board: List[List[str]]
:rtype: int
"""
count = 0
- Инициализация счётчика кораблей:
Переменнаяcountбудет хранить количество найденных кораблей. Начальное значение —0.
for i in range(len(board)):
for j in range(len(board[0])):
- Двойной цикл для обхода всей матрицы:
Внешний цикл проходит по строкам (индексi), внутренний — по столбцам (индексj).
if board[i][j] == 'X':
- Проверка текущей ячейки:
Если в текущей ячейке находится'X', это потенциальное начало нового корабля.
if (i == 0 or board[i-1][j] != 'X') and (j == 0 or board[i][j-1] != 'X'):
count += 1
Проверка начала нового корабля:
i == 0: Проверяем, является ли текущая ячейка первой строкой.board[i-1][j] != 'X': Если ячейка не в первой строке, проверяем, что сверху нет продолжения корабля.j == 0: Проверяем, является ли текущая ячейка первым столбцом.board[i][j-1] != 'X': Если ячейка не в первом столбце, проверяем, что слева нет продолжения корабля.
Если выполнены оба условия (сверху и слева нет продолжения), значит текущая ячейка — это начало нового корабля. Увеличиваем счётчик
count.
return count- Возврат результата:
После обхода всей матрицы возвращаем общее количество кораблей.
Пример работы алгоритма
Пример 1
board = [ ["X", ".", ".", "X"], [".", ".", ".", "X"], [".", ".", ".", "X"] ]- Начинаем с первой строки:
- Первая ячейка (
board[0][0] = 'X') — начало нового корабля. - Четвёртая ячейка (
board[0][3] = 'X') — начало нового корабля.
- Первая ячейка (
- Переходим ко второй строке:
- Все ячейки либо пустые (
"."), либо являются продолжением корабля из первой строки.
- Все ячейки либо пустые (
- Переходим к третьей строке:
- Все ячейки либо пустые, либо являются продолжением корабля из первой строки.
Результат: 2 корабля.
- Начинаем с первой строки:
Пример 2
board = [["."]]- Матрица состоит из одной ячейки, которая пуста. Результат: 0 кораблей.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии