java实现逆时针矩阵,逆时针旋转矩阵M * N的每个环

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");

}

}

For 4*4 I should get

{{2,3,4,8},{1,7,11,12},{5,6,10,16},{9,13,14,15}}

but I am getting

{{2,3,4,8},{1,6,7,12},{5,10,11,16},{9,13,14,15}}

解决方案

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

I hope you can apply this #python code to #java, logic is the same. Or select python in hackerrank.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值