1 再次证明不能用双loop
2 建立一个累积区域和的数组,从(r1, c1)到(r2, c2)区域的和为dp[r2][c2]-dp[r2][c1-1]-dp[r1-1][c2]+dp[r1-1][c1-1]
3 使用动态规划的时候,需要先initialize一个和原始matrix一样大小的matrix,其中每一个元素的值为0
4 在init函数里,需要把每一个累积和求出来,这样在sumRegion函数里,就只需要直接调用就行了
5 为什么row和col都要增加1维呢?这是因为不加这一维,我们需要对(0, 0), (0, x) 和(x, 0)进行特殊处理,当row和col都加一维后,可以把这三种情况当做普通情况进行处理。然后self.sums[i][j]实际上表示原始matrix上
6 这种题目是使用了较多的memory,用空间换取时间,当需要调用很多次的时候,有较大的优势
7 要特别注意,self.sums[i][j]还有当前的matrix[i-1][j-1]这个值,因为matrix的维度比self.sums要小,所以这里有坐标差
8 self.sums[i][j]=matrix[i-1][j-1]+self.sums[i-1][j]+self.sums[i][j-1]-self.sums[i-1][j-1] 和
self.sums[row2][col2]-self.sums[row1-1][col2]-self.sums[row2][col1-1]+self.sums[row1-1][col1-1]是不一样的