列表

详情


BM67. 不同路径的数目(一)

描述

一个机器人在m×n大小的地图的左上角(起点)。
机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。
可以有多少种不同的路径从起点走到终点?

备注:m和n小于等于100,并保证计算结果在int范围内

数据范围:,保证计算结果在32位整型范围内
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度

示例1

输入:

2,1

输出:

1

示例2

输入:

2,2

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2021-01-17

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int uniquePaths(int m, int n) {
        // write code here
        int A[m][n];
        A[0][0]=1;
        int i,j;
        for(j=1;j<n;j++)  //第一行
            A[0][j]=1;
        for(i=1;i<m;i++)  //第一列
            A[i][0]=1;
        for(i=1;i<m;i++)
            for(j=1;j<n;j++)
                A[i][j]=A[i][j-1]+A[i-1][j];
        return A[i-1][j-1];
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 324KB, 提交时间: 2021-06-06

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int uniquePaths(int m, int n) {
        if ((m == 1) || (n == 1)) {
            return 1;
        }
        int dp[101][101] = {0};
        for (int i=1; i<=m; i++) { // 只有一列
            dp[i][1] = 1;
        }
        for (int j=1; j<=n; j++) { // 只有一行
            dp[1][j] = 1;
        }

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

        return dp[m][n];
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-05-24

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int uniquePaths(int m, int n) {
        // write code here
        vector<int> dp(n+1,1);
        
        for(int i=1;i<m;i++)
        {
            for(int j=2;j<=n;j++)
            {
                dp[j]=dp[j]+dp[j-1];
            }
        }
        
        return dp[n];
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-03-22

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int uniquePaths(int m, int n) {
        // write code here
        vector<vector<int>> dp(n, vector<int>(m, 0));
        
        for (int i = 0; i < m; i++) {
            dp[0][i] = 1;
        }
        for (int i = 0; i < n; i++) {
            dp[i][0] = 1;
        }
        
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        
        return dp[n - 1][m - 1];
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2020-10-30

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
    int uniquePaths(int m, int n) {
        // write code here
        if (m < 1 && n < 1) return 0;
        
        int path[m][n];
        for (int i=0; i<m; i++) 
            path[i][0] = 1;
        for (int j=0; j<n; j++)
            path[0][j] = 1;
        for (int i=1; i<m; i++){
            for (int j=1; j<n; j++){
                path[i][j] = path[i-1][j] + path[i][j-1];
            }
        }
        return path[m-1][n-1];
    }
};

上一题