查找矩阵内部的内部矩阵外层的算法

时间:2019-07-27 18:41:06

标签: java algorithm loops matrix

我正在尝试解决以下算法,但被卡住了。希望您能提供帮助。

根据给出:

  1. 主矩阵的大小为N * N
  2. K * L大小的内部矩阵     (内部矩阵包含在主矩阵中,并给出了索引)。

我应该编写一个函数,该函数返回内部矩阵的外层中所有元素的列表。如果没有元素,则返回一个空列表。

在每次迭代中,内部矩阵的大小都会变大,并包括以前的内部矩阵+外层。

例如:

通过给定黑色主矩阵和红色内部矩阵,返回标记为黄色的元素。继续,直到返回一个空列表。

enter image description here

我被困在哪里

通过增加内部矩阵的范围+1并比较主矩阵和内部矩阵的边缘,我可以轻松找到外层的元素。 但是,我陷入了一般如何增加循环(增加层数)的困境。 顺便说一句,我试图避免递归的解决方案。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则只需跟踪内部矩阵分别为(y1,x1)和(y2,x2)的左上角和右下角的坐标即可。然后,您可以轻松地获取外层并按如下所示扩展内部矩阵:

获取外层:这些元素的坐标为

  • 在max(0,x1-1),...,min(N-1,x2 + 1)中j的(y1-1,j)(如果y1> 0则在第一行)
  • max(0,x1-1),...,min(N-1,x2 + 1)中j的(y2 + 1,j)(如果y2
  • (i,x1-1)for y1,...,y2中的i(如果x1> 0则为左列)
  • (y,x2 + 1)表示y1,...,y2中的i(如果x2

展开内部矩阵:您只需要更新角坐标

  • y1 = max(0,y1-1),x1 = max(0,x1-1)
  • y2 = min(N-1,y2 + 1),x2 = min(N-1,x2 + 1)

然后重复直到(y1,x1)==(0,0)和(y2,x2)==(N-1,N-1)