LeetCode62/63/64 不同路径I/II/最小路径和
发布日期:2021-05-14 23:49:56 浏览次数:11 分类:精选文章

本文共 2498 字,大约阅读时间需要 8 分钟。

������������

���������������������������������

���������m���n���������������������������������������������������������������������������������������������������������������������������������������������������������

���������������������

������������������������������������m + n - 2���������������������������������������������n���m������������������m-1���������������������������C(m+n-2, m-1)���

������������������������

������������dp������������dp[i][j]������������(i, j)���������������������������������dp[0][0] = 1������������������������������������������dp������������

���������������������������

������������������������������������������������������������������������������������������������������������������������������������

���������������������������

������������������������������������������������������������������������������������

���������������

#include 
int uniquePaths(int m, int n) {
if (m == 0 || n == 0) return 0;
// ���������������������������
int total_steps = m + n - 2;
int choose = total_steps;
int back = m - 1;
// ���������������������������������
long result = 1;
for (int i = 1; i <= back; ++i) {
result *= (total_steps - back + i);
result /= i;
}
return result;
}
int main() {
// ������������
printf("m=3,n=2: %d\n", uniquePaths(3,2));
printf("m=7,n=3: %d\n", uniquePaths(7,3));
return 0;
}

���������������������������������������������

������������������������1���������������0������������������������������������������������������������������������������������������

������������������������

������������dp������dp[i][j]������������(i, j)���������������������������������������������dp[i][j] = 0������������dp[i][j] = dp[i-1][j] + dp[i][j-1]���

���������������

int uniquePathsWithObstacles(int** obstacleGrid, int m, int n) {
if (m == 0 || n == 0) return 0;
// ���������DP���
int dp[m][n];
int sum;
for (int i=0; i

���������������������������������

���m x n���������������������������������������������������������������������������������������

������������������������

������dp������dp[i][j]������������(i, j)���������������������dp[i][j] = grid[i][j] + min(dp[i][j-1], dp[i-1][j])���

���������������

int minPathSum(int** grid, int m, int n) {
if (m == 0 || n == 0) return 0;
int dp[m][n];
for (int i=0; i

������������������������������������������������������������������������������������������������������������������������������������

上一篇:LeetCode70 爬楼梯(斐波那契数)
下一篇:LeetCode31 下一个排列

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月18日 04时23分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章