【问题标题】:Rotate each ring of the matrix M*N anticlockwise逆时针旋转矩阵 M*N 的每个环
【发布时间】:2020-04-28 04:21:48
【问题描述】:

我无法逆时针旋转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}}

【问题讨论】:

    标签: java arrays matrix multidimensional-array rotation


    【解决方案1】:

    逆时针旋转每一层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,逻辑是一样的。或者在hackerrank中选择python。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2020-07-08
      • 2013-08-04
      • 2019-02-08
      相关资源
      最近更新 更多