62.不同路径(leetcode)

首先想到的是回朔法hhh,结果超时了,思路应该是没有错的

class Solution {

public:

void dfs(int m,int n,int startm,int startn,int &count)

{

    if(startm<1 || startn<1 || startm>m || startn>n)  //判断是否越界

        return ;

    dfs(m,n,startm+1,startn,count); //向下移动

    dfs(m,n,startm,startn+1,count); //向右移动

    if(startm == m && startn == n)  //到达终点+1

        count++;

}

    int uniquePaths(int m, int n) {

        int count=0;

        dfs(m,n,1,1,count);

        return count;

    }

};

使用动态规划的话,要使用dp数组,并且dp[i][j] =dp[i-1][j]+dp[i][j-1],当前格子等于上一个和左边格子的值和,因为只能向下移动或者向右移动。

class Solution {

public:

    int uniquePaths(int m, int n) {

        vector<vector<int> >dp(m,vector<int>(n,1));  //dp数组初始化

        for(int i =0;i<m;i++) {  //双层循环给dp赋值

            for(int j=0;j<n;j++) {

                if( i == 0 || j == 0)   //边界为1

                    continue;

                else

                    dp[i][j] =dp[i-1][j]+dp[i][j-1];  //上一个格子和左一个格子的值之和

            }

        }

        return dp[m-1][n-1]; //返回dp数组的最后一个数

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空寂夜雨时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值