如何用循环内单次函数调用替代矩阵上下左右遍历的四次调用?
解决方案
你可以用方向偏移量数组来实现循环调用,这是网格遍历场景里最常用的写法,比你尝试的取模方式更直观且不易出错:
首先定义包含上下左右四个方向偏移的列表,每个元素是一个元组,分别对应行和列的变化量:
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
然后循环这个列表,每次取出偏移量计算新的坐标,再调用函数:
for dr, dc in directions: exploreIsland(grid, row + dr, col + dc, m, n)
为什么你之前的方法没成功?
你用range(1,4)只能生成3个数值,没办法覆盖4个方向;而且通过取模生成正负符号的方式,很难同时对应行和列的不同偏移组合(比如上下是行变化、左右是列变化),逻辑会绕,不如直接用偏移量数组清晰。
这种写法的好处还在于扩展性强——如果以后需要遍历斜向(比如左上、右下等),只需要在directions里添加对应的元组(比如(-1,-1)、(1,1))就行,不需要重复写多遍函数调用。
内容的提问来源于stack exchange,提问作者Figurinha
相关产品推荐
相关产品推荐

