Monday, April 3, 2023

Matrix Layer Rotation | HackerRank | c++

 void matrixRotation(vector<vector<int>> matrix, int r) {

    int m = matrix.size(), n = matrix[0].size();
    int numLayers = min(m, n) / 2;
   
    // Rotate each layer r times
    for (int layer = 0; layer < numLayers; layer++) {
        int layerHeight = m - 2 * layer, layerWidth = n - 2 * layer;
        int numRotations = r % (2 * (layerHeight + layerWidth - 2));
        while (numRotations--) {
            // Rotate right edge
            for (int i = layer; i < layer + layerHeight - 1; i++) {
                swap(matrix[i][n - layer - 1], matrix[i + 1][n - layer - 1]);
            }
            // Rotate bottom edge
            for (int i = n - layer - 1; i > layer; i--) {
                swap(matrix[m - layer - 1][i], matrix[m - layer - 1][i - 1]);
            }
            // Rotate left edge
            for (int i = m - layer - 1; i > layer; i--) {
                swap(matrix[i][layer], matrix[i - 1][layer]);
            }
            // Rotate top edge
            for (int i = layer; i < layer + layerWidth - 2; i++) {
                swap(matrix[layer][i], matrix[layer][i + 1]);
            }
        }
    }
   
    // Print the rotated matrix
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}

No comments:

Post a Comment

horizontal ads