How to print a given matrix in spiral form with Swift

1 Answer

0 votes
import Foundation

func printMatrixInSpiralForm(_ matrix: [[Int]]) {
    guard !matrix.isEmpty else { return }

    var top = 0
    var bottom = matrix.count - 1
    var left = 0
    var right = matrix[0].count - 1

    while true {
        if left > right { break }

        // Top row
        for i in left...right {
            print("\(matrix[top][i]) ", terminator: "")
        }
        print()
        top += 1

        if top > bottom { break }

        // Right column
        for i in top...bottom {
            print("\(matrix[i][right]) ", terminator: "")
        }
        print()
        right -= 1

        if left > right { break }

        // Bottom row
        for i in stride(from: right, through: left, by: -1) {
            print("\(matrix[bottom][i]) ", terminator: "")
        }
        print()
        bottom -= 1

        if top > bottom { break }

        // Left column
        for i in stride(from: bottom, through: top, by: -1) {
            print("\(matrix[i][left]) ", terminator: "")
        }
        print()
        left += 1
    }
}

let matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
]

printMatrixInSpiralForm(matrix)



/*
run:

1 2 3 4 
8 12 16 
15 14 13 
9 5 
6 7 
11 
10 

*/

 



answered Jun 12 by avibootz
...