fun printMatrix(matrix: Array<IntArray>) {
matrix.forEach { row ->
println(row.joinToString(" "))
}
}
/**
* Rotates a square matrix 90 degrees to the left (counterclockwise).
* param matrix - The square matrix to rotate.
*/
fun rotateMatrix90DegreesLeft(matrix: Array<IntArray>) {
val len = matrix.size
// Validate input: Ensure it's a square matrix
if (!matrix.all { it.size == len }) {
throw IllegalArgumentException("Input must be a square matrix.")
}
// Perform the rotation in-place
for (layer in 0 until len / 2) {
val first = layer
val last = len - 1 - layer
for (i in first until last) {
val offset = i - first
// Save the top element
val top = matrix[first][i]
// Move right to top
matrix[first][i] = matrix[i][last]
// Move bottom to right
matrix[i][last] = matrix[last][last - offset]
// Move left to bottom
matrix[last][last - offset] = matrix[last - offset][first]
// Move top to left
matrix[last - offset][first] = top
}
}
}
fun main() {
val matrix = arrayOf(
intArrayOf(1, 2, 3),
intArrayOf(4, 5, 6),
intArrayOf(7, 8, 9)
)
rotateMatrix90DegreesLeft(matrix)
println("Matrix After 90° Left Rotation:")
printMatrix(matrix)
}
/*
run:
Matrix After 90° Left Rotation:
3 6 9
2 5 8
1 4 7
*/