給定乙個由0和1組成的非空的二維網格,乙個島嶼是指四個方向(包括橫向和縱向)都相連的一組1(1表示陸地)。你可以假設網格的四個邊緣都被水包圍。
找出所有不同的島嶼的個數。如果乙個島嶼與另乙個島嶼形狀相同(不考慮旋轉和翻摺),我們認為這兩個島嶼是相同的。
11
1
和
1
11
是不同的島嶼,因為我們不考慮旋轉和翻摺。
樣例 1:網格的每乙個維度的長度都不超過樣例 2:輸入:
[ [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
輸入:
[ [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 ...