1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| #include <iostream> #include <vector> using namespace std;
class NumMatrix { public: vector<vector<int>> sums; NumMatrix(vector<vector<int>>& matrix) { for (int i = 0; i < matrix.size(); ++i) { vector<int> sum; for (int j = 0; j < matrix[i].size(); ++j) { if (i == 0) { if (j == 0) { sum.push_back(matrix[0][0]); } else { sum.push_back(matrix[0][j] + sum[j - 1]); } } else { if (j == 0) { sum.push_back(matrix[i][0] + sums[i - 1][0]); } else { sum.push_back(matrix[i][j] + sums[i - 1][j] + sum[j - 1] - sums[i - 1][j - 1]); } } } sums.push_back(sum); } } int sumRegion(int row1, int col1, int row2, int col2) { int result = sums[row2][col2]; if (row1 > 0) { result -= sums[row1 - 1][col2]; } if (col1 > 0) { result -= sums[row2][col1 - 1]; } if (row1 > 0 && col1 > 0) { result += sums[row1 - 1][col1 - 1]; } return result; } };
int main() { vector<vector<int>> 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}};
NumMatrix *obj = new NumMatrix(matrix); std::cout << obj->sumRegion(2, 1, 4, 3) << std::endl; std::cout << obj->sumRegion(1, 1, 2, 2) << std::endl; std::cout << obj->sumRegion(1, 2, 2, 4) << std::endl; }
|