java - 像链一样左移数组

标签 java c algorithm matrix

我想左移一个 n*n 数组(n 是一个偶数),m 次,如下图:

enter image description here

我花了一天的时间寻找解决方案,但找不到通用的解决方案。

你知道解决这个问题的算法吗?或者任何可以帮助我的指南?

例如(每个括号代表数组中的一个单元格):

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/

相关文章:

java - org.hibernate.HibernateException : Not able to obtain connection

java - 应用程序、远程脚本和安全/混淆

algorithm - 为数字供电作为分而治之的解决方案

java - 如何实现询问用户是否要再次运行我的 java 程序?

java - Spring -WS-测试: How to mock a SoapFaultDetail

java - 将 WholeFileInputFormat 与 Hadoop MapReduce 结合使用仍然会导致 Mapper 一次处理 1 行

c - 通过 TCP 传输 RSA 加密数据的最佳方式?

c - 主线程和工作线程初始化

c - Codevision AVR 中的错​​误

algorithm - 应用于私有(private)方法的单元测试