题目
题目如下,其实并不难,属于小而美的前缀和技巧中的体型。因为我之前做过这道题,所以重刷也马上就能写。但是对比我写的和之前看别人写的,明显我的代码不够简洁,一个核心的差异在于对DP数组的定义上。
问题
先看下我的代码,我对DP数组的定义是:存储以(0,0)为起点,到(i, j)的数组之和。提交代码显示超出时间限制。
两个问题:
- 边界条件处理贼麻烦,我自己写的时候也注意到了;(但这不是导致超时的原因)
- 处理超时,因为我每次要算一遍DP。
class NumMatrix:
def __init__(self, matrix: List[List[int]]):
self.matrix = matrix
def sumFromLeftCorner(self):
R, C = len(self.matrix), len(self.matrix[0])
dp = [[0 for j in range(C)] for i in range(R)]
for i in range(R):
for j in range(C):
if i == 0 and j == 0:
dp[i][j] =