1. 程式人生 > 實用技巧 >牛客-島嶼的數量

牛客-島嶼的數量

#題目描述
#給一個01矩陣,1代表是陸地,0代表海洋, 如果兩個1相鄰,那麼這兩個1屬於同一個島。我們只考慮上下左右為相鄰。
#島嶼: 相鄰陸地可以組成一個島嶼(相鄰:上下左右) 判斷島嶼個數。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# 判斷島嶼數量
# @param grid char字元型二維陣列
# @return int整型
#
程式:
class Solution:
def solve(self , grid=[[]] ):
islands=[]
rows=len(grid)
cols=len(grid[0])
for i in range(rows):
for j in range(cols):
if grid[i][j]=='1' or grid[i][j]==1:
inisland=False
o=None
for k in range(len(islands)):
for l in islands[k]:
if abs(i-l[0])==1 and j==l[1] or abs(j-l[1])==1 and i==l[0]:
if inisland==False:
inisland=True
islands[k].append([i,j])
o=k
else:
islands[o].extend(islands[k])
islands[k]=[]
if inisland==False:
islands.append([[i,j]])
print(islands)
islandcount=0
for i in islands:
if i!=[]:
islandcount=islandcount+1
return islandcount



# write code here
s=[[1,1,0,0,0],
[1,0,1,0,1],
[1,0,0,0,1],
[1,0,1,0,1],
[1,1,1,1,1]]
a=Solution()
print(a.solve(s))

輸出:

[[[0, 0]]]
[[[0, 0], [0, 1]]]
[[[0, 0], [0, 1], [1, 0]]]
[[[0, 0], [0, 1], [1, 0]], [[1, 2]]]
[[[0, 0], [0, 1], [1, 0]], [[1, 2]], [[1, 4]]]
[[[0, 0], [0, 1], [1, 0], [2, 0]], [[1, 2]], [[1, 4]]]
[[[0, 0], [0, 1], [1, 0], [2, 0]], [[1, 2]], [[1, 4], [2, 4]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0]], [[1, 2]], [[1, 4], [2, 4]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0]], [[1, 2]], [[1, 4], [2, 4]], [[3, 2]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0]], [[1, 2]], [[1, 4], [2, 4], [3, 4]], [[3, 2]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0], [4, 0]], [[1, 2]], [[1, 4], [2, 4], [3, 4]], [[3, 2]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1]], [[1, 2]], [[1, 4], [2, 4], [3, 4]], [[3, 2]]]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1], [4, 2], [3, 2]], [[1, 2]], [[1, 4], [2, 4], [3, 4]], []]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1], [4, 2], [3, 2], [4, 3]], [[1, 2]], [[1, 4], [2, 4], [3, 4]], []]
[[[0, 0], [0, 1], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1], [4, 2], [3, 2], [4, 3], [4, 4], [1, 4], [2, 4], [3, 4]], [[1, 2]], [], []]
2

答題結果:
超時!!!

有更好的方法嗎?

請大牛指點