package main
import (
"fmt"
)
// rotate90Clockwise rotates a square matrix 90 degrees clockwise.
func rotate90Clockwise(matrix [][]int) {
N := len(matrix)
// Step 1: Transpose the matrix
for i := 0; i < N; i++ {
for j := i; j < N; j++ {
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
}
}
// Step 2: Reverse each row
for i := 0; i < N; i++ {
reverse(matrix[i])
}
}
// reverse reverses an array in place.
func reverse(row []int) {
left, right := 0, len(row)-1
for left < right {
row[left], row[right] = row[right], row[left]
left++
right--
}
}
// printMatrix prints the matrix in a readable format.
func printMatrix(matrix [][]int) {
for _, row := range matrix {
for _, val := range row {
fmt.Print(val, " ")
}
fmt.Println()
}
}
func main() {
matrix := [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
fmt.Println("Original Matrix:")
printMatrix(matrix)
rotate90Clockwise(matrix)
fmt.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
*/