最开始使用带记录的递归,结果还是超时,然后改成动规打表以后就通过了。使用三层循环,最外层为长或宽的最大值,复杂度为O(n^3)。
int record[101][101]; void initialize(){ int i, j, k; for(i = 1; i < 101; i++){ record[1][i] = 1; record[i][1] = 1; } for(i = 2; i < 101; i++){ for(j = 2; j <= i; j++){ for(k = 2; k <= i; k++){ record[j][k] = record[j-1][k]+record[j][k-1]; } } } } int uniquePaths(int m, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function initialize(); return record[m][n]; }