Leetcode unique-paths

转载自:http://blog.csdn.net/linhuanmars/article/details/22126357

原题链接: http://oj.leetcode.com/problems/unique-paths/ 

这道题是比较典型的动态规划的题目。模型简单,但是可以考核动态规划的思想。

我们先说说brute force的解法,比较容易想到用递归,到达某一格的路径数量等于它的上面和左边的路径数之和,结束条件是走到行或者列的边缘。因为每条路径都会重新探索,时间复杂度是结果数量的量级,不是多项式的复杂度。代码如下: 

[java] view plaincopy
  1. public int uniquePaths(int m, int n) {  
  2.     return helper(1,1,m,n);  
  3. }  
  4. private int helper(int row, int col, int m, int n)  
  5. {  
  6.     if(row==m && col==n)  
  7.         return 1;  
  8.     if(row>m || col>n)  
  9.         return 0;  
  10.     return helper(row+1,col,m,n)+helper(row,col+1,m,n);  
  11. }  
上面的代码放到LeetCode中跑会超时,因为不是多项式量级的。其实上一步中递推式已经出来了,就是res[i][j]=res[i-1][j]+res[i][j-1],这样我们就可以用一个数组来保存历史信息,也就是在i行j列的路径数,这样每次就不需要重复计算,从而降低复杂度。用动态规划我们只需要对所有格子进行扫描一次,到了最后一个得到的结果就是总的路径数,所以时间复杂度是O(m*n)。而对于空间可以看出我们每次只需要用到上一行当前列,以及前一列当前行的信息,我们只需要用一个一维数组存上一行的信息即可,然后扫过来依次更替掉上一行对应列的信息即可(因为所需要用到的信息都还没被更替掉),所以空间复杂度是O(n)(其实如果要更加严谨,我们可以去行和列中小的那个,然后把小的放在内层循环,这样空间复杂度就是O(min(m,n)),下面的代码为了避免看起来过于繁杂,就不做这一步了,有兴趣的朋友可以实现一下,比较简单,不过代码有点啰嗦)。实现的代码如下:
[java] view plaincopy
  1. public int uniquePaths(int m, int n) {  
  2.     if(m<=0 || n<=0)  
  3.         return 0;  
  4.     int[] res = new int[n];  
  5.     res[0] = 1;  
  6.     for(int i=0;i<m;i++)  
  7.     {  
  8.         for(int j=1;j<n;j++)  
  9.         {  
  10.            res[j] += res[j-1];  
  11.         }  
  12.     }  
  13.     return res[n-1];  
  14. }  
上面的方法用动态规划来求解,如果我们仔细的看这个问题背后的数学模型,其实就是机器人总共走m+n-2步,其中m-1步往下走,n-1步往右走,本质上就是一个组合问题,也就是从m+n-2个不同元素中每次取出m-1个元素的组合数。根据 组合 的计算公式,我们可以写代码来求解即可。代码如下:
[java] view plaincopy
  1. public int uniquePaths(int m, int n) {  
  2.     double dom = 1;  
  3.     double dedom = 1;  
  4.     int small = m<n? m-1:n-1;  
  5.     int big = m<n? n-1:m-1;  
  6.     for(int i=1;i<=small;i++)  
  7.     {  
  8.         dedom *= i;  
  9.         dom *= small+big+1-i;  
  10.     }  
  11.     return (int)(dom/dedom);  
  12. }  
上面的代码求解了组合的结果,只需要做一次行或者列的扫描,所以时间复杂度是O(min(m,n)),而空间复杂度是O(1)。比起上面的两种解法更优。不过这里有个弊端,就是如果代码中的dom和dedom如果不是double,而是用int,那么会很容易越界,因为这是一个阶乘,所以大家在面试中讨论这种方法要注意和提及越界的问题。
上面介绍了几种方法来求解这个问题,其实都是比较简单的模型,只是提供了不同的思路。 Unique Paths II 是这道题的扩展,给机器人增加了障碍,有兴趣的朋友可以联系一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里商业操作系统重磅发布!新零售绝对不止是零售层面的问题

来源&#xff1a;物联网智库摘要&#xff1a;2019年1月11日&#xff0c;阿里巴巴one商业大会在杭州隆重召开&#xff0c;阿里巴巴CEO张勇发表了题为《阿里巴巴商业操作系统》的主题演讲&#xff0c;并将此次大会称为“数字经济时代的网商大会”。会上&#xff0c;张勇宣布——在…

PHP操作MongoDB GridFS 存储文件

PHP操作MongoDB GridFS 存储文件&#xff0c;如图片文件 我的测试代码&#xff1a; 1、前端上传文件html index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">…

JS入门程序(一)

程序代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><title>Bootstrap 101 Template</title><link href"css/bootstrap.min.css" rel"stylesheet" media"screen"></head><…

Oracle运行set autotrace on报错SP2-0618、SP2-0611

SQL> set autotrace on SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色 SP2-0611: 启用 STATISTICS 报告时出错 原因: PLUSTRACE角色不存在 解决办法&#xff1a; conn / as sysdba %ORACLE_HOME%\sqlplus\admin\plustrce.sql grant plustrace to hr; 转载于:https…

万字长文回顾智能驾驶进化史

来源&#xff1a;软件定义世界&#xff08;SDX&#xff09;作者&#xff1a;吴甘沙、张玉新摘要&#xff1a;当卡尔 本茨发明汽车&#xff0c;人类进入汽车时代时&#xff0c;科学技术就对人类的 “ 出行 ” 进行了新的定义&#xff0c;而随着技术的不断发展与进步&#xff0c…

组合数学基本工具-- 排列与组合以及简单公式

排列 从n个不同元素中任取m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排列起来&#xff0c;叫做从n个不同元素中取出m个元素的一个排列。当mn时所有的排列情况叫全排列。 P(n,m)n(n-1)...(n-m1)n!/(n-m)! 特别的&#xff0c;定义0!1 组合 组合公式是指从…

atitit.动态加载数据库配置in orm hibernate mybatis

atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象,,,,生成工厂类,在opoenSession 1 2.1. Hibernate动态添加配置流程 1 2.2. mybatis动态添加配置流程 1 2.3. #hb code 2 …

重磅!德勤TMT行业2019十大预测,遍地黄金的中国机会

来源&#xff1a;智东西摘要&#xff1a;着眼于全球科技、传媒和电信行业在未来5年的关键趋势&#xff0c;分析颠覆性技术变革及未来可能会影响行业内企业的因素。全球最大的会计事务所德勤于近日发布了《2019科技、传媒和电信行业预测》报告&#xff0c;该报告着眼于全球科技、…

组合数学-- 放回取样基础公式证明

放回取样 用CR(m , r) 表示放回取样或者重复取样时一个m集合的r组合的数量&#xff0c;例如在允许放回取样的情况下&#xff0c;集合{a , b}的4个元素的组合可以得到下面的结果&#xff1a; {a,a,a,a}, {b,b,b,b}, {a,a,a,b}, {a,a,b,b}, {a,b,b,b} 下面我们给出可放回取样…

PHP环境安全性能检查

PHP环境安全性能检查 PHP在Linux环境下安全配置是一个复杂的过程&#xff0c;其中涉及到很多的细节设置&#xff0c;在这里发出来一个脚本&#xff0c;通过这个脚本来检测你的PHP环境是否存在安全隐患&#xff0c;从而针对这些对你的PHP环境进行加固。功能&#xff1a; 1.检测P…

集合的所有子集的算法

转载自&#xff1a;http://blog.csdn.net/yzl20092856/article/details/39995085 求集合的所有子集的算法 对于任意集合A&#xff0c;元素个数为n&#xff08;空集n0&#xff09;&#xff0c;其所有子集的个数为2^n个 如集合A{a,b,c},其子集个数为8&#xff1b;对于任意一个…

经济学人: Arm,孙正义手中的这只水晶球正在帮助他预测未来

来源&#xff1a;经济学人编译&#xff1a;机器之能 高璇摘要&#xff1a;除了看中 Arm 出色的盈利能力&#xff0c;对于孙正义来说&#xff0c;Arm 更像是未来计算应用的信息交换中心&#xff0c;虽然不能给软银具体的投资建议&#xff0c;但 Arm 确实可以告诉孙正义有前景、值…

C++开源项目

转载自&#xff1a;http://www.cnblogs.com/liinux/ 程序员要站在巨人的肩膀上&#xff0c;C拥有丰富的开源库&#xff0c;这里包括&#xff1a;标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 github:https://github.com/fffaraz/awesome-…

深入浅出浮点数

1. 什么是浮点数在计算机系统的发展过程中&#xff0c;曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数&#xff08;Fixed Point Number&#xff09;。在这种表达方式中&#xff0c;小数点固定的位于实数所有数字中间的某个位置。货币的表达就可以使用这种方式&am…

深度解析2019中国机器人行业年会主旨报告:把脉中国机器人发展,助力产业创新与协作共融...

来源&#xff1a;机器人大讲堂摘要&#xff1a;1月10日&#xff0c;由机器人大讲堂联合主办的2019中国机器人行业年会在北京盛大开幕。2018年经济下行趋势明显&#xff0c;迫使我们能沉下心来面对之前异常火爆的机器人市场&#xff0c;整个行业开始变得跌跌撞撞&#xff0c;很多…

矩阵的物理意义

转载自&#xff1a;http://blog.csdn.net/NightkidLi_911/article/category/2428737 &#xff08;一&#xff09; 如果不熟悉线性代数的概念&#xff0c;要去学习自然科学&#xff0c;现在看来就和文盲差不多。”&#xff0c;然而“按照现行的国际标准&#xff0c;线性代数是…

一些看起来简单做起来难的程序员笔试面试题集锦

1、判断三个bool值中是否至少有两个bool为真&#xff1f; 此题有几种不同的解法 &#xff08;1&#xff09;传统解法 bool leastTwo(bool a, bool b, bool c){return (a&&b) || (b&&c) || (c&&a); }&#xff08;2&#xff09;如果学过电路的可以考虑利…

如何防止基因编辑技术突破底线:警惕科学狂人再现

作者&#xff1a;胡丹萍 吴跃伟 刘楚来源&#xff1a;澎湃新闻从前隅于学界的基因编辑一词&#xff0c;在2018年&#xff0c;有如一声惊雷传入寻常百姓家。DNA和基因是生物体的核心代码&#xff0c;使用一组生物分子像剪刀或橡皮一样精确地改变基因序列即基因编辑技术。几十年来…

二分查找算法java

二分查找又称折半查找&#xff0c;它是一种效率较高的查找方法。 折半查找的算法思想是将数列按有序化(递增或递减)排列&#xff0c;查找过程中采用跳跃式方式查找&#xff0c;即先以有序数列的中点位置为比较对象&#xff0c;如果要找的元素值小于该中点元素&#xff0c;则将待…

opencv简单的矩阵操作

OpenCV的基本矩阵操作与示例 OpenCV中的矩阵操作非常重要&#xff0c;本文总结了矩阵的创建、初始化以及基本矩阵操作&#xff0c;给出了示例代码&#xff0c;主要内容包括&#xff1a; 创建与初始化矩阵加减法矩阵乘法矩阵转置矩阵求逆矩阵非零元素个数矩阵均值与标准差矩阵全…