1、题目数组
一、审题 spa
二、分析code
给出一个二维数组,给出两个坐标。求这两个坐标之间的全部元素的和。blog
2、解答io
一、思路class
①、 新建一个数组 sums[rows + 1][cols + 1],其中元素 sums[i+1][j+1] 用于储存 matrix 中从 [0, 0] 到 [i][j] 之间的元素和。im
②、sums 中第一行与第一列元素均为 0,即处理了 matrix 边界的状况。二维数组
class NumMatrix { int[][] sums; public NumMatrix(int[][] matrix) { int rows = matrix.length; int cols; if(rows == 0 || (cols = matrix[0].length) == 0) return; sums = new int[rows + 1][cols + 1]; for (int i = 1; i <= rows; i++) { for (int j = 1; j <= cols; j++) { sums[i][j] = matrix[i - 1][j - 1] + sums[i - 1][j] + sums[i][j - 1] - sums[i - 1][j - 1]; } } } public int sumRegion(int row1, int col1, int row2, int col2) { return sums[row2 + 1][col2 + 1] - sums[row2 + 1][col1] - sums[row1][col2 + 1] + sums[row1][col1]; } }