• 114 不同的路径


    原题网址:https://www.lintcode.com/problem/unique-paths/description

    描述

    有一个机器人的位于一个 m × n 个网格左上角。

    机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。

    问有多少条不同的路径?

    n和m均不超过100

    您在真实的面试中是否遇到过这个题?  

    样例

    给出 m = 3 和 n = 3, 返回 6.
    给出 m = 4 和 n = 5, 返回 35.

    标签
    数组
    动态规划(DP)
     
    思路:动态规划。创建二维数组dp【m】【n】,则dp【i】【j】表示机器人从左上角走到点(i,j)的不同路径数。
    状态转移方程为:dp【i】【j】= dp【i-1】【j】+ dp【i】【j-1】。
    初始dp【0】【0】=1;
    最后return dp【m-1】【n-1】。
     
    AC代码:
    class Solution {
    public:
        /**
         * @param m: positive integer (1 <= m <= 100)
         * @param n: positive integer (1 <= n <= 100)
         * @return: An integer
         */
        int uniquePaths(int m, int n) {
            // write your code here
            if (m<=0||n<=0)
        {
            return 0;
        }
        vector<vector<int>> dp(m,vector<int>(n,0));
        dp[0][0]=1;
        for (int i=1;i<m;i++)
        {
            dp[i][0]=1;
        }
        for (int j=1;j<n;j++)
        {
            dp[0][j]=1;
        }
        for (int i=1;i<m;i++)
        {
            for (int j=1;j<n;j++)
            {
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
        }
    };

    其他方法:https://blog.csdn.net/wutingyehe/article/details/46830271

    优化:dp数组可以将至一维。

    创建动态数组dp【n】,则 dp[j] 表示机器人到达 i 行第 j 列有多少种不同路径。

    第一行dp值均为1;

    此后的每一行,遍历列,当前列的dp值等于 上一行同一列的dp值(dp【j】)加上同一行上一列的dp值(dp【j-1】)。

    即状态转移方程为dp【j】= dp【j】(注意dp【j】未赋值更新前表示的是上一行同一列的数值)+ dp【j-1】。

    最后return dp【n-1】。

    代码见上面链接。

     

  • 相关阅读:
    Buffer cache spillover: only buffers
    11g中如何禁用自动统计信息收集作业
    OTN中文技术论坛清净的ORACLE讨论之地
    关闭磁盘自动运行
    #error
    在VC++中实现无标题栏对话框的拖动
    string,CString,char*之间的转化
    关于注册表
    #pragma once
    extern "C"用法详解
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/9134444.html
Copyright © 2020-2023  润新知