[Swift]LeetCode308. 二维区域和检索 - 可变 $ Range Sum Query 2D - Mutable
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).
![[Swift]LeetCode308. 二维区域和检索 - 可变 $ Range Sum Query 2D - Mutable 随笔 第1张 [Swift]LeetCode308. 二维区域和检索 - 可变 $ Range Sum Query 2D - Mutable 随笔 第1张](https://www.liuyixiang.com/zb_users/theme/Lucky/style/image/grey.gif)
The above rectangle (with the red border) is defined by (row1, col1) = (2, 1) and (row2, col2) = (4, 3), which contains sum = 8.
Example:
Given matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5] ] sumRegion(2, 1, 4, 3) -> 8 update(3, 2, 2) sumRegion(2, 1, 4, 3) -> 10
Note:
- The matrix is only modifiable by the update function.
- You may assume the number of calls to update and sumRegion function is distributed evenly.
- You may assume that row1 ≤ row2 and col1 ≤ col2.
给定一个二维矩阵,找到的数目的元素内部定义的rectangle市ITS的左上角(row1, col1)和右下角(row2, col2).
上面的矩形(带红色边框)由(row1,col1)=(2,1)和(row2,col2)=(4,3)定义,其中包含sum=8。
实例:
给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5] ] sumRegion(2, 1, 4, 3) -> 8 update(3, 2, 2) sumRegion(2, 1, 4, 3) -> 10
注:
只读modifiable冰矩阵的更新功能。
你可以要求银行assume'号更新功能和sumregion evenly冰的分布。
你可能是 row1 ≤ row2 且 col1 ≤ col2.
Solution:
1 class NumMatrix { 2 var mat:[[Int]] = [[Int]]() 3 var colSum:[[Int]] = [[Int]]() 4 init(_ matrix:inout [[Int]]) 5 { 6 if matrix.isEmpty || matrix[0].isEmpty 7 { 8 return 9 } 10 mat = matrix 11 colSum = [[Int]](repeating:[Int](repeating:0,count:matrix[0].count),count:matrix.count + 1) 12 for i in 1..<colSum.count 13 { 14 for j in 0..<colSum[0].count 15 { 16 colSum[i][j] = colSum[i - 1][j] + matrix[i - 1][j] 17 } 18 } 19 } 20 21 func update(_ row:Int,_ col:Int,_ val:Int) 22 { 23 for i in (row + 1)..<colSum.count 24 { 25 colSum[i][col] += val - mat[row][col] 26 } 27 mat[row][col] = val 28 } 29 30 func sumRegion(_ row1:Int,_ col1:Int,_ row2:Int,_ col2:Int) -> Int 31 { 32 var res:Int = 0 33 for j in col1...col2 34 { 35 res += colSum[row2 + 1][j] - colSum[row1][j] 36 } 37 return res 38 } 39 }
点击:Playground测试
1 var matrix:[[Int]] = [[3, 0, 1, 4, 2],[5, 6, 3, 2, 1],[1, 2, 0, 1, 5],[4, 1, 0, 1, 7],[1, 0, 3, 0, 5]] 2 var sol = NumMatrix(&matrix) 3 print(sol.sumRegion(2, 1, 4, 3)) 4 //Print 8 5 sol.update(3, 2, 2) 6 print(sol.sumRegion(2, 1, 4, 3)) 7 //Print 10
更多精彩

