1314. Matrix Block Sum

QUESTION:

Given a m x n matrix mat and an integer k, return a matrix answer where each answer[i][j] is the sum of all elements mat[r][c] for:

i - k <= r <= i + k, j - k <= c <= j + k, and (r, c) is a valid position in the matrix.

Example 1:

``````Input: mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output: [[12,21,16],[27,45,33],[24,39,28]]
``````

Example 2:

``````Input: mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
Output: [[45,45,45],[45,45,45],[45,45,45]]
``````

Constraints:

``````m == mat.length
n == mat[i].length
1 <= m, n, k <= 100
1 <= mat[i][j] <= 100
``````

SOLUTION:

``````class Solution {
func matrixBlockSum(_ mat: [[Int]], _ k: Int) -> [[Int]] {
var result:[[Int]] = Array(repeating: Array(repeating: 0, count: mat[0].count), count: mat.count)
for indexI in mat.indices {
for indexJ in mat[indexI].indices {
result[indexI][indexJ] = matrixBlockSumHelper(mat, indexI, indexJ, k)
}
}
return result
}

func matrixBlockSumHelper(_ mat: [[Int]],_ i: Int, _ j: Int, _ k:Int) -> Int {
var sum:Int = 0
var startI:Int = i - k >= 0 ? i - k : 0
var endI:Int = i + k <= mat.count - 1 ? i + k : mat.count - 1
var startJ:Int = j - k >= 0 ? j - k : 0
var endJ:Int = j + k <= mat[i].count - 1 ? j + k : mat[i].count - 1
for indexI in startI...endI {
for indexJ in startJ...endJ {
sum += mat[indexI][indexJ]
}
}
return sum
}
}
``````
>