https://leetcode-cn.com/problems/unique-paths/
法一:排列组合


public int uniquePaths(int m, int n) {long ans = 1;for (int x = n, y = 1; y < m && x <= m + n - 2; ++x, ++y) {ans = ans * x / y;}return (int) ans;}

排列组合问题。。。。
从(0, 0)往下最多能走5步,往右最多能走4步,

法二:动态规划
public int uniquePaths(int m, int n) {return process(0, 0, m, n);}private int process(int row, int col, int m, int n) {if (row == m - 1 && col == n - 1) {return 1;}else if (row == m - 1) {return 1;}else if (col == n - 1) {return 1;}else if (row > m - 1 || col > n - 1) {return 0;}return process(row, col + 1, m, n) + process(row + 1, col, m, n);}
public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = n - 1; i >= 0; i--) {dp[m - 1][i] = 1;}for (int i = 0; i < m; i++) {dp[i][n - 1] = 1;}for (int i = m - 2; i >= 0; i--) {for (int j = n - 2; j >= 0; j--) {dp[i][j] = dp[i][j + 1] + dp[i + 1][j];}}return dp[0][0];}
