Исходя из этого ответа, я изменил решение с 2D-массива на 1D-массив.Это написано на C #, но должно работать для любого языка C-esque.
public static int[] Rotate1DSquareMatrixClockwise(int[] matrix)
{
int size = (int)Math.Sqrt(matrix.Length);
int[] result = new int[matrix.Length];
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
result[i * size + j] = matrix[(size - j - 1) * size + i];
}
}
return result;
}
Этот ответ работает только для квадратных матриц .Примечание. Чтобы получить доступ к элементам из квадратного двумерного массива в виде одномерного массива, достаточно просто: for matrix NxN: m1[i,j] = m2[i * N + j]
Итак, это все, что я изменил в связанном решении.