Skip to content

Latest commit

 

History

History
40 lines (37 loc) · 1.14 KB

48.rotate-image.md

File metadata and controls

40 lines (37 loc) · 1.14 KB

Matrix Transformation

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
        }
    }
}

Copy With Extra Space

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)
}