我想左移一个 n*n 数组(n 是一个偶数),m 次,如下图:
我花了一天的时间寻找解决方案,但找不到通用的解决方案。
你知道解决这个问题的算法吗?或者任何可以帮助我的指南?
例如(每个括号代表数组中的一个单元格):
n= 2 and m =1
before shifting :
(1) (2)
(3) (4)
after shifting :
(2) (4)
(0) (3)
第二个例子:
n= 4 and m =2
before shifting :
(1) (2) (3) (4)
(5) (6) (7) (8)
(9) (10) (11) (12)
(13) (14) (15) (16)
after shifting :
(3) (4) (8) (12)
(7) (11) (10) (16)
(6) (0) (0) (15)
(5) (9) (13) (14)
最佳答案
这是一个提示。
您可以获得一个有趣的递归解决方案。将您的矩阵想象成一堆嵌套在另一个矩阵中的矩阵(例如,对于 nxn 矩阵,其中还有一个 (n-2)x(n-2) 矩阵,等等。一个例子是矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
有一个子矩阵
6 7
10 11
较大矩阵外环上的元素是螺旋的第一部分。一旦你处理好这些转移,你就不需要担心它们了。您可以将矩阵的下一个环视为一个新矩阵。 内矩阵是原始矩阵的子问题。
所以你需要找到一个可以应用于原始矩阵外部元素的解决方案,然后将相同类型的解决方案应用于内部矩阵,依此类推,直到到达中心。如果你仔细想想,这就是 n 是偶数的原因。每个子矩阵的大小为 n-2,或 (n-2)-2,等等,直到达到 2x2 的子矩阵。
关于java - 像链一样左移数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15716380/