leetcode 62. Unique Paths

一、题意

一个机器人位于一个m x n网格的左上角 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径?

二、解法

解法一:
动态规划
当前位置的路径数由左和上的路径数总和决定, f [ i ] [ j ] = f [ i − 1 ] [ j ] + f [ i ] [ j − 1 ] f[i][j]=f[i-1][j]+f[i][j-1] f[i][j]=f[i1][j]+f[i][j1]
时间复杂度: O ( m n ) O(mn) O(mn)
空间复杂度: O ( m n ) O(mn) O(mn)
解法二:
排列组合
到终点总共m+n-2步,竖方向上m-1步,横向n-1步。确定竖向组合后横向组合就确定了。总共 C n + m − 2 m − 1 C^{m-1}_{n+m-2} Cn+m2m1
时间复杂度: O ( m n ) O(mn) O(mn)
空间复杂度: O ( 1 ) O(1) O(1)

三、代码

解法一:

 int uniquePaths(int m, int n) {
        vector<vector<int>>  grid(m,vector<int>(n,0));
        grid[0][0]=1;
        for(int i=1;i<m;i++){
                for(int j=1;j<n;j++){
                    if(j>0){
                            grid[i][j]+=grid[i][j-1]; 
                    }
                      if(i>0){
                            grid[i][j]+=grid[i-1][j]; 
                    }
               }
        }
        return grid[m-1][n-1];
    }

解法二:

  int uniquePaths(int m, int n) {
       long long ans=1;
        for(int x=n,y=1;y<m;x++,y++){
            ans=ans*x/y;
        }
        return ans;
    }

四、总结

主要推出如何状态转移。当时没有想到排列组合这种解法。

五、引用

[1] leetcode: 62. Unique Paths
[2] leetcode: 62. Unique Paths官方解法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值