rotate matrix M*N anticlockwise

与世无争的帅哥 提交于 2020-07-22 08:35:51

问题


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

回答1:


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
            
       
   

for clockwise go to https://www.geeksforgeeks.org/rotate-matrix-elements/

i hope you can apply this #python code to #java ,logic will same.or select python in hackerrank.



来源:https://stackoverflow.com/questions/59683000/rotate-matrix-mn-anticlockwise

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!