553 炸彈襲擊

2022-02-15 00:06:58 字數 3910 閱讀 4010

中文english

給定乙個二維矩陣, 每乙個格仔可能是一堵牆w,或者 乙個敵人e或者空0(數字 '0'), 返回你可以用乙個炸彈殺死的最大敵人數. 炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人。 由於牆比較堅固,所以牆不會被摧毀.

樣例1

輸入:

grid =[

"0e00",

"e0we",

"0e00"

]輸出: 3

解釋:把炸彈放在 (1,1) 能殺3個敵人

樣例2

輸入:

grid =[

"0e00",

"eewe",

"0e00"

]輸出: 2

解釋:p把炸彈放在 (0,0) 或 (0,3) 或 (2,0) 或 (2,3) 能殺2個敵人

你只能在空的地方放置炸彈.

輸入測試資料 (每行乙個引數)如何理解測試資料?

class

solution:

""" @param grid: given a 2d grid, each cell is either '

w', '

e' or '0'

@return: an integer, the maximum enemies you can kill

using

one bomb

"""'''

大致思路:

1.給出乙個方法,求出當前點可以襲擊的人數

2.內外迴圈,初始化max_num = 0,如果current_num >max_num,則更新,最終返回即可

'''def maxkilledenemies(self, grid):

if not grid:return

0max_num = 0

l_x,l_y = len(grid[0

]),len(grid)

#迴圈for x in

range(l_y):

for y in

range(l_x):

if grid[x][y] == '0'

: current_num =self.currentkilledenmies(x,y,grid)

if current_num >max_num:

max_num =current_num

return

max_num

def currentkilledenmies(self,x,y,grid):

#上下左右延伸,遇到牆則停止,遇到人則計數

current_num = 0

l_x = len(grid[0

]) l_y =len(grid)

a,b =x,y

#左右延伸,左邊走

j = 1

while y - j >= 0

:

if (grid[x][y - j] == 'e'

): current_num += 1

if (grid[x][y - j] == 'w'

):

break

j += 1

#右邊走

j = 1

while y + j <= l_x - 1

:

if (grid[x][y + j] == 'e'

): current_num += 1

if (grid[x][y + j] == 'w'

):

break

j += 1

#上面走

i = 1

while x - i >= 0

:

if (grid[x - i][y] == 'e'

): current_num += 1

if (grid[x - i][y] == 'w'

):

break

i += 1

#下面走

i = 1

while x + i <= l_y - 1

:

if (grid[x + i][y] == 'e'

): current_num += 1

if (grid[x + i][y] == 'w'

):

break

i += 1

return current_num

注:lintcode未通過,你的**執行時間超過了限制,檢查你的時間複雜度。

優化:

class

solution:

""" @param grid: given a 2d grid, each cell is either '

w', '

e' or '0'

@return: an integer, the maximum enemies you can kill

using

one bomb

"""'''

大致思路:

1.給出乙個方法,求出當前點可以襲擊的人數

2.內外迴圈,初始化max_num = 0,如果current_num >max_num,則更新,最終返回即可

'''def maxkilledenemies(self, grid):

m, n = len(grid), 0

ifm:

n = len(grid[0

]) result, rows = 0, 0

num_x = 0

cols = [0

for i in

range(n)]

for i in

range(m):

for j in

range(n):

#取出橫向座標當前位置開始,可能當前座標是0或者上乙個是牆壁,看右邊最多是多少人(緊貼0,和左邊牆壁看,所以不考慮左邊的人)

if j == 0 or grid[i][j-1] == 'w'

: num_x = 0

for k in

range(j, n):

if grid[i][k] == 'w'

:

break

if grid[i][k] == 'e'

: num_x += 1

#y軸

if i == 0 or grid[i-1][j] == 'w'

: cols[j] = 0

for k in

range(i, m):

if grid[k][j] == 'w'

:

break

if grid[k][j] == 'e'

: #這樣避免前面的被覆蓋掉,[

1,2...]前面大的不會被後面覆蓋掉,一直到出現w牆壁的時候,才會覆蓋前面的值

cols[j] += 1

if grid[i][j] == '

0' and num_x + cols[j] >result:

result = num_x +cols[j]

return result

lintcode 553 炸彈襲擊

給定乙個二維矩陣,每乙個格仔可能是一堵牆 w,或者 乙個敵人 e 或者空 0 數字 0 返回你可以用乙個炸彈殺死的最大敵人數.炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人。由於牆比較堅固,所以牆不會被摧毀.樣例 樣例1輸入 grid 0e00 e0we 0e00 輸出 3解釋 把炸彈放在 1,1 ...

炸彈襲擊 LintCode

描述 給乙個二維矩陣,每乙個格仔都可能是一堵牆 w,乙個敵人 e 或者空 0 數字 0 返回你可以用乙個炸彈殺死的最大敵人數.炸彈會殺死所有在同一行和同一列沒有牆阻隔的敵人,因為牆比較堅固難以摧毀.你只能在空的地方放置炸彈.樣例 給乙個矩陣 0e0 0e0 w e0e 00返回 3.在 1,1 處放...

553 最優除法 python

題 給定一組正整數,相鄰的整數之間將會進行浮點除法操作。例如,2,3,4 2 3 4 要找出怎麼新增括號,才能得到最大的結果,並且返回的表示式不應該含有冗餘的括號。法 可以發現nums中第乙個數永遠在分子上,第二個數永遠作為被除數在分母上,那麼如果後面的數都可以在分子上,就可以獲得最大結果。所以根據...