Leetcode 62. Unique Paths

A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the diagram below).

递归超时

class Solution {
public:
    int uniquePaths(int m, int n) {
        int ret = 0;
        findPath(m, n, 1, 1, ret);
        return ret;
    }

private:
    void findPath(int m, int n, int x, int y, int& ret) {
        if (x != m)
            findPath(m, n, x + 1, y, ret);
        if (y != n)
            findPath(m, n, x, y + 1, ret);
        if (x == m && y == n) 
            ++ret;
        return;
    }
};

动态规划

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int> > p(m + 1, vector<int>(n + 1, 1));

        for (size_t i = 2; i<= m; ++i){
            for (size_t j = 2; j <= n; ++j) {
                p[i][j] = p[i - 1][j] + p[i][j - 1];
            }
        }

        return p[m][n];
    }
};

参考后
空间优化

class Solution {
public:
    int uniquePaths(int m, int n) {

        // m < n;
        if (m > n) return uniquePaths(n, m);

        vector<int> p(m, 0);
        // 1,1 -> 1,x 有一种路径
        p[0] = 1;

        for (size_t i = 0; i != n; ++i) 
            for (size_t j = 1; j != m; ++j)
                p[j] = p[j] + p[j - 1];

        return p[m - 1];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值