zoukankan      html  css  js  c++  java
  • 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).

    How many possible unique paths are there?
    题目

    Note: m and n will be at most 100.

    分析

    这是一道动态规划的题目:
    对于一个mn矩阵,求解从初始点(0,0)到结束点(m1,n1)的路径条数,规定每次只能向右或向下走一步;

    我们知道:

    1.当i=0,j=[0,n1]时,f(i,j)=f(i,j1)=1; 因为每次只能向右走一步,只有一条路径;
    2. 当i=[0,m1],j=0时,f(i,j)=f(i1,j)=1;因为每次只能向下走一步,只有一条路径;
    3. 当(i,j)为其它时,f(i,j)=f(i1,j)+f(i,j1);因为此时可由(i1,j)向右走一步,或者(i,j1)向下走一步,为两者之和;

    AC代码

    //非递归实现回溯,会超时
    class Solution {
    public:
        int uniquePaths(int m, int n) {
            if (m == 0 || n == 0)
                return 0;
            vector<vector<int> > ret(m, vector<int>(n, 1));
            //如果矩阵为单行或者单列,则只有一条路径
            for (int i = 1; i < m; i++)
            for (int j = 1; j < n; j++)
                ret[i][j] = ret[i - 1][j] + ret[i][j - 1];
    
            return ret[m-1][n-1];
        }
    };
    

    递归实现算法(TLE)

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            if (m == 0 || n == 0)
                return 0;
            //如果矩阵为单行或者单列,则只有一条路径
            else if (m == 1 || n == 1)
                return 1;
    
            else
                return uniquePaths(m, n - 1) + uniquePaths(m - 1, n);
        }
    };

    GitHub测试程序源码

  • 相关阅读:
    变量的生命周期【CPP】
    cpp静态成员和普通成员
    MAVEN学习(二) Myeclipse简单maven项目搭建
    redis安装和部署
    MAVEN学习(三) Maven构建多模块项目
    redis常用客户端命令
    本地计算机如何连接阿里云Mysql数据库
    MAVEN学习(一) nexus私服
    Linux之系统目录结构
    .net开发常用的第三方开发组件
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214870.html
Copyright © 2011-2022 走看看