我需要能够通过声明范围和方向来旋转多维数组的一部分。
说我有一个int数组:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
[13, 14, 15, 16]
如果我的范围是[2,2]到[3,3]并顺时针旋转,则会得到:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 15, 11]
[13, 14, 16, 12]
然后如果我将范围[0,1]设置为[2,3]并逆时针旋转,则会得到:
[1, 2, 3, 4]
[7, 15, 16, 8]
[6, 10, 14, 11]
[5, 9, 13, 12]
该数组将始终是矩阵NxN(2 * 2,3 * 3,4 * 4 ..)。仅仅旋转矩阵不是问题,但我在矩阵内部仅将其一部分做有问题。我将如何在C#中执行此操作?
最佳答案
它使我想起this hackerrank problem。
我看不到您的具体问题是什么-您可以将此子矩阵作为一个独立的对象并旋转它。
例如,考虑以下算法:
将矩阵视为一组'circuits'
。
将这些'circuits'
加一个。
为每个电路施加旋转-不要忘记检查您的number of rotations% circuit perimeter = 0
(在这种情况下旋转是不变的)
对于'circuit'
中的每个整数,只需计算它是新的position
(一些关于矩阵索引的简单数学)。
旋转子矩阵的所有电路后,即可得到结果。
关于c# - 旋转多维数组的零件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35689419/