逆时针旋转矩阵M*N的每个环
Rotate each ring of the 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} }
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");
}
}
对于4*4
我应该得到
{{2,3,4,8},{1,7,11,12},{5,6,10,16},{9,13,14,15}}
但我得到了
{{2,3,4,8},{1,6,7,12},{5,10,11,16},{9,13,14,15}}
逆时针旋转每一层的矩阵元素M*N
:
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
,逻辑是一样的。或者 select python 在 hackerrank.
我无法逆时针旋转 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} }
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");
}
}
对于4*4
我应该得到
{{2,3,4,8},{1,7,11,12},{5,6,10,16},{9,13,14,15}}
但我得到了
{{2,3,4,8},{1,6,7,12},{5,10,11,16},{9,13,14,15}}
逆时针旋转每一层的矩阵元素M*N
:
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
,逻辑是一样的。或者 select python 在 hackerrank.