php中文网

螺旋矩阵 III

php中文网

885。螺旋矩阵 iii

主题: 数组、矩阵、模拟

您从朝东的行 x 列网格的单元格(rstart,cstart)开始。西北角位于网格的第一行第一列,东南角位于最后一行第一列。

您将沿着顺时针螺旋形状行走,参观这个网格中的每个位置。每当您移动到网格边界之外时,我们都会继续在网格之外行走(但稍后可能会返回到网格边界。)。最终,我们到达网格的所有行*列空间。

返回坐标数组,按照您访问网格的顺序表示网格的位置.

示例1:

  • 输入:行= 1,列= 4,rstart = 0,cstart = 0
  • 输出: [[0,0],[0,1],[0,2],[0,3]]

示例2:

  • 输入:行= 5,列= 6,rstart = 1,cstart = 4
  • 输出: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0, 4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2] ,[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[ 0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

限制:

  • 1
  • 0
  • 0

解决方案:

要解决这个问题,我们可以按照以下步骤操作:

  1. 方向数组:使用方向数组促进按正确顺序移动(东→南→西→北)。每个方向都会有相应的行索引和列索引的变化。
  2. 步数管理:您需要控制每个方向要走多少步。最初,您向东移动 1 步,然后向南移动 1 步,向西移动 2 步,向北移动 2 步,依此类推。
  3. 边界检查:确保每次移动后,检查新位置是否在网格边界内。如果是,将其添加到结果数组中。
  4. 停止条件:访问完所有行 * 列位置后停止循环。

让我们用 php 实现这个解决方案:885。螺旋矩阵 iii

<?php // Example Usage:
print_r(spiralMatrixIII(1, 4, 0, 0)); // [[0,0],[0,1],[0,2],[0,3]]
print_r(spiralMatrixIII(5, 6, 1, 4)); // [[1,4],[1,5],[2,5],[2,4], ...]
?>

解释:

  1. directions:方向数组保存向东、南、西、北移动的行和列的变化。
  2. 运动:我们从(rstart,cstart)开始,按照螺旋图案的方向移动。
  3. 边界检查:仅在网格内时将位置添加到结果中。
  4. 步数控制:stepcount 管理转弯前在当前方向上走了多少步。两圈后增加。
  5. 终止:循环继续,直到访问完网格中的所有位置。

这种方法确保我们按照所需的螺旋顺序访问网格中的每个单元格。

联系链接

如果您发现本系列有帮助,请考虑在 github 上给存储库 一颗星,或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!

如果您想要更多类似的有用内容,请随时关注我:

  • 领英
  • github

以上就是螺旋矩阵 III的详细内容,更多请关注php中文网其它相关文章!