Matrix Block Sum LeetCode solution in Rust
1impl Solution {2pub fn matrix_block_sum(mat: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {3let n = mat.len();4let m = mat[0].len();5let k = k as usize;6let mut memo = vec![vec![0; m + 1]; n + 1];7for i in 0..n {8for j in 0..m {9memo[i + 1][j + 1] = memo[i + 1][j] + memo[i][j + 1] - memo[i][j] + mat[i][j];10}11}1213let mut result = vec![vec![0; m]; n];14for i in 0..n {15for j in 0..m {16let i_min = i.saturating_sub(k);17let i_max = std::cmp::min(i + k, n - 1);18let j_min = j.saturating_sub(k);19let j_max = std::cmp::min(j + k, m - 1);2021result[i][j] = memo[i_max + 1][j_max + 1] - memo[i_max + 1][j_min] - memo[i_min][j_max + 1]22+ memo[i_min][j_min];23}24}25result26}27}