题目描述:
N*M的棋盘,小兵从左下角走到右上角,只能向上或向右走,问有多少种走法?
解答:
解法一:
public static int trace(int m, int n) {
if(n < 1 || m < 1)
return 0;
if(n == 1 && m == 1)
return 1;
return trace(m - 1, n) + trace(m, n - 1);
}
时间复杂度:2^(n + m)
解法二:
public static int trace(int m, int n) {
int[][] num = new int[m + 1][n + 1];
if(n < 1 || m < 1) {
return 0;
}
if(n == 1 && m == 1) {
num[1][1] = 1;
return num[1][1];
}
if(num[m][n] > 0) {
return num[m][n];
}
else {
num[m][n] = trace(m - 1, n) + trace(m, n - 1);;
return num[m][n];
}
}
时间复杂度:m*n
问题扩展: