【算法五十】62. 不同路径

62. 不同路径

动态规划(二维数组):

java 复制代码
class Solution {
    public int uniquePaths(int m, int n) {
        //子问题:走到目标的左边以及上边的方法和
        //从左上角走到dp[i][j]有多少种路径
        //状态转移方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]
        //从小到大

        int[][] dp = new int[m][n];
        dp[0][0] = 1;
        for(int i = 0;i<m;i++){
            for(int j = 0;j<n;j++){
                if(i ==0 && j==0){
                    continue;
                }
                dp[i][j] = (i>0 ? dp[i-1][j]:0) + (j>0 ? dp[i][j-1]:0);
            }
        }
        return dp[m-1][n-1];
    }
}

时间复杂度:O(M*N)

空间复杂度:O(M*N)

动态规划(一维数组):

java 复制代码
class Solution {
    public int uniquePaths(int m, int n) {
        int[] dp = new int[n];
        //第一行只有1
        for(int i = 0;i<n;i++){
            dp[i] = 1;
        }

        //接着换行处理
        for(int i = 1;i<m;i++){
            for(int j = 1;j<n;j++){
                dp[j] = dp[j] + dp[j-1];
            }
        }
        return dp[n-1];
    }
}

时间复杂度:O(M*N)

空间复杂度:O(N)

优化思路:就是将二维的m转化为for循环里的i,按层去处理,因为dpij只和自己左边还有上面的数值有关

相关推荐
疯狂打码的少年1 小时前
【数据结构】图的遍历:深度优先搜索(DFS)
数据结构·笔记·算法·深度优先
-凌凌漆-2 小时前
【freertos】Task创建(v2)
java·开发语言·算法
Nil2083 小时前
leetcode 24两两交换链表中的节点
算法·leetcode·链表
.格子衫.3 小时前
033动态规划之状态压缩DP——算法备赛
算法·动态规划
ysa0510303 小时前
c++常用自带函数用法与注意
c++·笔记·算法
带多刺的玫瑰4 小时前
Leecode#4刷题之寻找两个正序数组的中位数
java·前端·算法
土司大王5 小时前
LeetCode hot100——除了自身以外数组的乘积
数据结构·算法·leetcode
IvanCodes5 小时前
RAG 实战教程(三):向量数据库检索算法,KNN、IVF、HNSW 与 Faiss 实战
人工智能·算法·agent
阿无,5 小时前
布隆过滤器
java·算法·哈希算法