给定 一个 m x n 的棋盘,只能向右或者向下走,,求棋子从左上角走到右下角的情况一共有多少种?
这是一个动态规划求解的问题,原问题的解可以由子问题求解。
状态转移方程:f[m][n] = f[m-1][n]+f[m][n-1]
动态规划不一定会用带递归,而且递归容易栈溢出,双重for循环直接从底层向上求解即可。
注意第一行和第一列的值都为1,因为一直往右走或者往下走只有一种情况。
public class Maze {
public static void main(String[] args) {
int result = new Maze().f(8, 8);
System.out.println(result);
}
public int f(int m,int n) {
int [][]f = new int[m][n];
for(int i=0;i四、运行结果1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8
1 3 6 10 15 21 28 36
1 4 10 20 35 56 84 120
1 5 15 35 70 126 210 330
1 6 21 56 126 252 462 792
1 7 28 84 210 462 924 1716
1 8 36 120 330 792 1716 3432
3432