标签:LC695 面试题 代表 岛屿 平地 矩阵 数值 改编
改编题
给定一个二维矩阵,上面有0到9的数值。0代表海洋,非0代表岛屿,
非0值且数值相同相连代表平地。
求面积最大的一块平地的位置数。
如以下矩阵:
[
[3, 0, 3, 0, 5],
[4, 3, 0, 4, 5],
[3, 3, 4, 0, 3],
[3, 0, 0, 4, 4]
],
占地最大的一块平地为数字3所占据的4个位置,结果为4。
输入:二维数组
返回:int
Python解答
class S:
def dfs(self, i, j, target=1):
if not 0 <= i < len(self.nums) or not 0 <= j < len(self.nums[0]):
return 0
if self.nums[i][j] == 0:
return 0
if self.nums[i][j] != target: # 不是target直接返回0
return 0
self.nums[i][j] = 0 # 置为0没问题,因为上面的判断,不同的target是不相干扰的
return 1 + self.dfs(i-1, j, target) + self.dfs(i+1, j, target) \
+ self.dfs(i, j-1, target) + self.dfs(i, j+1, target)
def solution(self, nums):
self.nums = nums
self.maxarea = 0
for i in range(0, len(self.nums)):
for j in range(0, len(self.nums[0])):
if self.nums[i][j] != 0:
area = self.dfs(i, j, target=self.nums[i][j])
self.maxarea = max(area, self.maxarea)
return self.maxarea
nums = [[3, 0, 3, 0, 5],[4, 3, 0, 4, 5],[3, 3, 4, 0, 3],[3, 0, 0, 4, 4]]#,
# nums外面后面不能有逗号
s = S()
print(s.solution(nums))
标签:LC695,面试题,代表,岛屿,平地,矩阵,数值,改编 来源: https://www.cnblogs.com/hsiangyu-meng/p/16445975.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。