Lintcode 不同島嶼的個數

2021-09-24 13:47:37 字數 2727 閱讀 7415

給定乙個由0和1組成的非空的二維網格,乙個島嶼是指四個方向(包括橫向和縱向)都相連的一組1(1表示陸地)。你可以假設網格的四個邊緣都被水包圍。

找出所有不同的島嶼的個數。如果乙個島嶼與另乙個島嶼形狀相同(不考慮旋轉和翻摺),我們認為這兩個島嶼是相同的。

11

1

1

11

是不同的島嶼,因為我們不考慮旋轉和翻摺。

樣例 1:

輸入:

[ [1,1,0,0,1],

[1,0,0,0,0],

[1,1,0,0,1],

[0,1,0,1,1]

]輸出: 3

解釋:

11 1 1

1 11

111

樣例 2:

輸入: 

[ [1,1,0,0,0],

[1,1,0,0,0],

[0,0,0,1,1],

[0,0,0,1,1]

]輸出: 1

網格的每乙個維度的長度都不超過50

python:

class solution:

"""@param grid: a list of lists of integers

@return: return an integer, denote the number of distinct islands

"""def changetofalse(self, grid, m, n, mmin, mmax, nmin, nmax):

if m < 0 or m >= len(grid) or n < 0 or n >= len(grid[0]):

return

if grid[m][n] == 1:

grid[m][n] = 2

mmin = min(m, mmin[0])

del mmin[0]

mmax = max(m, mmax[0])

del mmax[0]

nmin = min(n, nmin[0])

del nmin[0]

nmax = max(n, nmax[0])

del nmax[0]

self.changetofalse(grid, m-1, n, mmin, mmax, nmin, nmax)

self.changetofalse(grid, m+1, n, mmin, mmax, nmin, nmax)

self.changetofalse(grid, m, n-1, mmin, mmax, nmin, nmax)

self.changetofalse(grid, m, n+1, mmin, mmax, nmin, nmax)

def numberofdistinctislands(self, grid):

# write your code here

if len(grid) == 0 or len(grid[0]) == 0:

return 0

resultstr =

for i in range(len(grid)):

for j in range(len(grid[i])):

if grid[i][j] == 1:

mmin =

mmax =

nmin =

nmax =

self.changetofalse(grid, i, j, mmin, mmax, nmin, nmax)

temp = ""

flag = false

for p in range(mmin[0], mmax[0]+1, 1):

for q in range(nmin[0], nmax[0]+1, 1):

temp = temp + str(grid[p][q])

temp += "_"

if len(resultstr) == 0:

else:

for index in range(len(resultstr)):

if resultstr[index] == temp:

flag = true

break

if flag == false:

return len(resultstr)

c++:

class solution 

if (grid[m][n] == 1)

}int numberofdistinctislands(vector> &grid)

vectorresultstr;

for (int i = 0; i < grid.size(); i++)

temp += "_";

}if (resultstr.empty())

else

}if (flag == false)}}

}}

return resultstr.size();

}};

ps:python之所以複雜一點是因為傳參問題,如果能簡化請告知

島嶼的個數 LintCode

給乙個01矩陣,求不同的島嶼的個數。0代表海,1代表島,如果兩個1相鄰,那麼這兩個1屬於同乙個島。我們只考慮上下左右為相鄰。樣例 在矩陣 1,1,0,0,0 0,1,0,0,1 0,0,0,1,1 0,0,0,0,0 0,0,0,0,1 中有 3 個島.思路 利用遞迴,將與當前島嶼相接壤的島存入ma...

島嶼的個數

給乙個01矩陣,求不同的島嶼的個數。0代表海,1代表島,如果兩個1相鄰,那麼這兩個1屬於同乙個島。我們只考慮上下左右為相鄰。樣例 在矩陣 1,1,0,0,0 0,1,0,0,1 0,0,0,1,1 0,0,0,0,0 0,0,0,0,1 中有3個島.借鑑網上 整理得 public class sol...

433 島嶼的個數

4.11 陣列統一賦值的函式arrays.fill 感覺自己的想法很野啊,用總的點的個數去減。就是要注意邊界值,陣列是從下標0開始的,一定要注意。public class solution 行數 int m grid 0 length if m 0 列數 int count m n boolean ...