leetcode hot100刷题日记——21.不同路径

和20题一样的思路link

题解:

cpp 复制代码
class Solution {
public:
    int dfs(int i,int j,vector<vector<int>>&memo){
        //超过了边界,return 0
        if(i<0||j<0){
            return 0;
        }
        //从(0,0)到(0,0)只有一条路
        if(i==0&&j==0){
            return 1;
        }
        int &res=memo[i][j];//看之前有没有走过
        if(res){
            return res;//如果走过
        }
        return res=dfs(i-1,j,memo)+dfs(i,j-1,memo);
    }
    int uniquePaths(int m, int n) {
        vector memo(m,vector<int>(n));//用m行n列的数组存位置状态
        return dfs(m-1,n-1,memo);
    }
};
cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) {
        //dp[i][j]=dp[i-1][j]+dp[i][j-1]
        //即:dp[i+1][j+1]=dp[i][j+1]+dp[i+1][j]
        vector dp(m+1,vector<int>(n+1));
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(i==0&&j==0){
                    dp[1][1]=1;//其实看成左上角顶点是(1,1),只有1种方法走到
                }else{
                    dp[i+1][j+1]=dp[i][j+1]+dp[i+1][j];//假设i=0,j=1,dp[1][2]=dp[0][2]+dp[1][1]
                    //这个时候其实是要走到顶点处下面一格,那么很容易知道dp[0][j]和dp[i][0]都必须是0
                    //因为超过边界了,我们在初始化dp数组的时候,dp数组全是0,所以已经包含了以上
                }
            }
        }
        return dp[m][n];
    }
};
相关推荐
2601_970703834 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你02144 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi5 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang5 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!6 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法
维克兜率天7 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
罗西的思考7 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
神也畏惧菠萝8 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
揽星河..8 小时前
【C语言】分支和循环
c语言·c++·算法