How to rotate a matrix 90 degrees clockwise in Kotlin

2 Answers

0 votes
fun rotate90Clockwise(matrix: Array<Array<Int>>) {
    val N = matrix.size

    // Step 1: Transpose the matrix
    for (i in 0 until N) {
        for (j in i until N) {
            val temp = matrix[i][j]
            matrix[i][j] = matrix[j][i]
            matrix[j][i] = temp
        }
    }

    // Step 2: Reverse each row
    matrix.forEach { it.reverse() }
}

fun printMatrix(matrix: Array<Array<Int>>) {
    matrix.forEach { row ->
        println(row.joinToString(" "))
    }
}

fun main() {
    val matrix = arrayOf(
        arrayOf(1, 2, 3),
        arrayOf(4, 5, 6),
        arrayOf(7, 8, 9)
    )

    println("Original Matrix:")
    printMatrix(matrix)

    rotate90Clockwise(matrix)

    println("\nRotated Matrix:")
    printMatrix(matrix)
}

 
  
/*
run:
  
Original Matrix:
1 2 3
4 5 6
7 8 9

Rotated Matrix:
7 4 1
8 5 2
9 6 3
  
*/

 



answered May 30 by avibootz
0 votes
fun rotate90Clockwise(matrix: Array<Array<Int>>): Array<Array<Int>> {
    val rows = matrix.size
    val cols = matrix[0].size

    // Create a new rotated matrix
    val rotated = Array(cols) { Array(rows) { 0 } }

    // Map values to rotated positions
    for (i in 0 until rows) {
        for (j in 0 until cols) {
            rotated[j][rows - 1 - i] = matrix[i][j]
        }
    }

    return rotated
}

fun printMatrix(matrix: Array<Array<Int>>) {
    matrix.forEach { row ->
        println(row.joinToString(" "))
    }
}

fun main() {
    val matrix = arrayOf(
        arrayOf(1, 2, 3, 4),
        arrayOf(5, 6, 7, 8),
        arrayOf(9, 10, 11, 12)
    )

    println("Original Matrix:")
    printMatrix(matrix)

    val rotated = rotate90Clockwise(matrix)

    println("\nRotated Matrix:")
    printMatrix(rotated)
}

 
  
/*
run:
  
Original Matrix:
1 2 3 4
5 6 7 8
9 10 11 12

Rotated Matrix:
9 5 1
10 6 2
11 7 3
12 8 4
  
*/

 



answered May 30 by avibootz
...