304. Range Sum Query 2D - Immutable

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];
    }
}
相關文章
相關標籤/搜索