We can reverse upside down, and swap the symmetry. (There are some equivalent ways but different sequences of operations)
fun rotate(matrix: Array<IntArray>): Unit {
for (i in 0 until matrix.size / 2) {
for (j in 0 until matrix[i].size) {
val reverseIndex = matrix.size - 1 - i
val temp = matrix[i][j]
matrix[i][j] = matrix[reverseIndex][j]
matrix[reverseIndex][j] = temp
}
}
for (i in 0 until matrix.size) {
for (j in i + 1 until matrix.size) {
val temp = matrix[i][j]
matrix[i][j] = matrix[j][i]
matrix[j][i] = temp
}
}
}
fun rotate(matrix: Array<IntArray>): Unit {
val rotateMatrix = Array<IntArray>(matrix.size, init = { _ ->
IntArray(matrix.size)
})
for (i in 0 until matrix.size) {
val row = matrix[i]
for (j in 0 until row.size) {
rotateMatrix[j][matrix.size - 1 - i] = row[j]
}
}
rotateMatrix.copyInto(matrix)
}