int memo[101][101];
int findMinPath(vector<vector<int> >& V, int r, int c) {
int R = V.size();
int C = V[0].size();
if (r >= R || c >= C) return 100000000; // Infinity
if (r == R - 1 && c == C - 1) return 0;
if (memo[r][c] != -1) return memo[r][c];
memo[r][c] = V[r][c] + min(findMinPath(V, r + 1, c), findMinPath(V, r, c + 1));
return memo[r][c];
}
Callsite :
memset(memo, -1, sizeof(memo));
findMinPath(V, 0, 0);
在上面的代码中,最坏的时间复杂度是什么?。我知道每个函数最多会调用其他函数一次,但我不清楚计算时间复杂度。
答案 0 :(得分:2)
备忘录是关键所在。通常情况下,这会呈指数级增长,但因为如果先前在memo
中计算结果,您永远不会执行其他递归步骤,那么在最坏的情况下,它会减少到memo
中的元素数。即 O(101 x 101)