How do you rotate a two dimensional array?

后端 未结 30 3129
耶瑟儿~
耶瑟儿~ 2020-11-22 02:43

Inspired by Raymond Chen\'s post, say you have a 4x4 two dimensional array, write a function that rotates it 90 degrees. Raymond links to a solution in pseudo code, but I\'d

30条回答
  •  -上瘾入骨i
    2020-11-22 03:23

    This is my implementation, in C, O(1) memory complexity, in place rotation, 90 degrees clockwise:

    #include 
    
    #define M_SIZE 5
    
    static void initMatrix();
    static void printMatrix();
    static void rotateMatrix();
    
    static int m[M_SIZE][M_SIZE];
    
    int main(void){
        initMatrix();
        printMatrix();
        rotateMatrix();
        printMatrix();
    
        return 0;
    }
    
    static void initMatrix(){
        int i, j;
    
        for(i = 0; i < M_SIZE; i++){
            for(j = 0; j < M_SIZE; j++){
                m[i][j] = M_SIZE*i + j + 1;
            }
        }
    }
    
    static void printMatrix(){
        int i, j;
    
        printf("Matrix\n");
        for(i = 0; i < M_SIZE; i++){
            for(j = 0; j < M_SIZE; j++){
                printf("%02d ", m[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
    static void rotateMatrix(){
        int r, c;
    
        for(r = 0; r < M_SIZE/2; r++){
            for(c = r; c < M_SIZE - r - 1; c++){
                int tmp = m[r][c];
    
                m[r][c] = m[M_SIZE - c - 1][r];
                m[M_SIZE - c - 1][r] = m[M_SIZE - r - 1][M_SIZE - c - 1];
                m[M_SIZE - r - 1][M_SIZE - c - 1] = m[c][M_SIZE - r - 1];
                m[c][M_SIZE - r - 1] = tmp;
            }
        }
    }
    

提交回复
热议问题