• 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测试程序源码

  • 相关阅读:
    近期前端中的 一些常见的面试题
    一道前端学习题
    前端程序员容易忽视的一些基础知识
    web前端工程师入门须知
    Web前端知识体系精简
    面试分享:一年经验初探阿里巴巴前端社招
    抽象类、抽象函数/抽象方法详解
    C#语法-虚方法详解 Virtual 虚函数
    面向对象语言:继承关系教程
    C#动态创建Xml-LinQ方式
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214870.html
Copyright © 2020-2023  润新知