逆时针旋转矩阵M * N [英] rotate matrix M*N anticlockwise
问题描述
我无法沿逆时针方向旋转M * N矩阵。我的代码对于3 * 3矩阵正常工作,但是当我尝试在其他情况下不起作用时,假设我对4 * 4矩阵进行工作,那么只有外部元素在旋转,内部4个元素即6,7,10,11没有旋转。我的输入是1-16个数字,例如4 * 4矩阵{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15, 16}}
I am not able to rotate a M*N matrix in anticlockwise direction. My code is working properly for 3*3 matrix but when I try for any other case it is not working assume I am doing it for 4*4 matrix then only outer elements are rotating and inner 4 elements i.e. 6,7,10,11 are not rotating. My input is 1-16 numbers as 4*4 matrix { {1, 2, 3, 4}, {5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 16} }
static void antirotatematrix(int m,
int n, int mat[][])
{
int row = 0, col = n-1;
int prev, curr;
while (row < m && col < n )
{
if (row+1 == m || col-1 == 0) {
break; }
prev = mat[row + 1][col];
for (int i = col; i>= 0; i--)
{
curr = mat[row][i];
mat[row][i] = prev;
prev = curr;
}
row++;
for (int i = row; i < m; i++)
{
curr = mat[i][0];
mat[i][0] = prev;
prev = curr;
}
n--;
if (row < m) {
for (int i = n-2; i <= col; i++)
{
curr = mat[m-1][i];
mat[m-1][i] = prev;
prev = curr;
}
}
m--;
if (col <= n)
{
for (int i = m-1; i >= row; i--)
{
curr = mat[i][col];
mat[i][col] = prev;
prev = curr;
}
}
col++;
}
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
System.out.print( mat[i][j] + " ");
System.out.print("\n");
}
}
推荐答案
旋转每层M * N沿逆时针方向的矩阵元素
rotate matrix element of each layer M*N in anticlockwise direction
for z in range(r):#r = n times to rotate your element of each layer
top = 0
bottom = len(matrix)-1
left = 0
right = len(matrix[0])-1
while left < right and top < bottom: # anticlockwise rotation of each layer.
prev = matrix[top+1][right]
for i in range(right,left-1,-1):
curr = matrix[top][i]
matrix[top][i]= prev
prev =curr
top += 1
for i in range(top,bottom+1):
curr = matrix[i][left]
matrix[i][left]=prev
prev=curr
left += 1
for i in range(left,right+1):
curr =matrix[bottom][i]
matrix[bottom][i]=prev
prev = curr
bottom -=1
for i in range(bottom,top-1,-1):
curr = matrix[i][right]
matrix[i][right]=prev
prev = curr
right -=1
顺时针转到 https://www.geeksforgeeks.org/rotate-matrix-elements/
我希望您可以应用此#python代码到#java,逻辑将保持不变。或在hackerrank中选择python。
i hope you can apply this #python code to #java ,logic will same.or select python in hackerrank.
这篇关于逆时针旋转矩阵M * N的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!