力扣练习之不同路径

我爱海鲸 2025-06-11 12:47:42 力扣、中级算法

简介中级算法、动态规划

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvjigd/

解法一:(python)

import math
class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        return int(math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1))

思路:根据题意我们知道机器人只能向下走或者向右走,那么它打到右下角,向下一定会走m-1步,向右一定会走n-1步,一共需要走m+n-2步,

那么我们就可以将这一过程转换为一个概率问题,从一共走的步数(m+n-2)中选取出(m-1)一共有多少中可能,即C(m+m-2,m-1)

2025-06-11 start:

解法二(java):

class Solution {
    public int uniquePaths(int m, int n) {
        if (m == 1 || n == 1) {
            return 1;
        }
        int[][] dp = new int[m+1][n+1];
        for (int i = 1; i <= m; i++) {
            dp[i][1] = 1;
        }
        for (int i = 1; i <= n; i++) {
            dp[1][i] = 1;
        }
        for (int i = 2; i <= m ; i++) {
            for (int j = 2; j <= n; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        return dp[m][n];
    }
}

思路:动态规划,要走到dp[m][n]就必须做到dp[m-1][n]或者dp[m][n-1]这里,所以dp[m][n] = dp[m-1][n] + dp[m][n-1],这里就是状态转移方程了,然后注意边界条件即可。

end

 

你好:我的2025