LeetCode Python 361 轟炸敵人

2021-09-23 08:09:01 字數 1492 閱讀 1939

給你乙個二維的網格圖,網格圖中的每乙個格仔裡要麼是一堵牆'w',要麼是乙個敵人'e',要麼是乙個空位'0'(數字 0 ),返回你用乙個炸彈最多能殺死敵人的數量。

由於牆體足夠堅硬,炸彈的威懾力沒有辦法穿越牆體,所以炸彈只能把所在位置同一行和同一列所有沒被牆擋住的敵人給炸死。

注意:你只能把炸彈放在乙個空的格仔裡

示例:

輸入:[["0","e","0","0"],["e","0","w","e"],["0","e","0","0"]]輸出:3解釋:對於如下網格圖,

0 e 0 0

e 0 w e

0 e 0 0

在位置 (1,1) 放置炸彈可以殺死 3 個敵人。

思路:

找到所有是0的點,然後向四個方向找可以炸死的敵人

class solution(object):

def maxkilledenemies(self, grid):

""":type grid: list[list[str]]

:rtype: int

"""if not grid or not grid[0]:

return 0

m, n = len(grid), len(grid[0])

res = 0

def count(x0, y0):

cnt = 0

for x in range(x0, -1, -1): #向上

if grid[x][y0] == "e":

cnt += 1

elif grid[x][y0] == "w":

break

for x in range(x0, m): #向下

if grid[x][y0] == "e":

cnt += 1

elif grid[x][y0] == "w":

break

for y in range(y0, -1, -1): #向左

if grid[x0][y] == "e":

cnt += 1

elif grid[x0][y] == "w":

break

for y in range(y0, n): #向右

if grid[x0][y] == "e":

cnt += 1

elif grid[x0][y] == "w":

break

return cnt

for i in range(m):

for j in range(n):

if grid[i][j] == "0":

res = max(res, count(i, j))

return res

leetcode python3 整數轉羅馬數字

1.思路 將數字分解成千位數 百位數 個位數,對不同的位數中分3個階段進行討論 9的 5 8之間的 4的 1 3之間的。對於不同的分位數和階段加上不同的符號處理 2.class solution def inttoroman self,num str if int num 1000 0 for i ...

leetcode python3演算法 島嶼個數

1.題目描述 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000 11000 ...

單排leetcode python3 兩數相加

給定兩個非空鍊錶來代表兩個非負數,位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807class listnode def init...