博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维矩阵由左上角到右下角只能向右或向下走所有可能路径取值之和最大值
阅读量:6117 次
发布时间:2019-06-21

本文共 915 字,大约阅读时间需要 3 分钟。

  hot3.png

二维矩阵由左上角到右下角只能向右或向下走所有可能路径取值之和最大值,来自网友发的腾讯的一道题目。

matrix = [

  [0, 0, 8, 0, 0],
  [0, 0, 0, 9, 0],
  [0, 7, 0, 0, 0],
  [0, 0, 6, 0, 0]
]

我用Haskell实现了一下:

164139_w8nf_170216.png

分三步实现,第一步倒推所有可能路径,第二步,反向倒推的路径,得到正向路径,如果只是求和,这一步可以省略。

第三步,对应坐标到具体的路径中,然后求和,获取最大值。没有用到matrix包,只用二维列表来实现。

结果地址:  

不过我不确定计算的路径是否正确,所以又写了一个js的路径绘制动画来验证结果:  

可以直接把Haskell输出的结果粘贴到里面验证,验证了一下基本应该没什么问题。

165402_7633_170216.png

m X n 矩阵的所有可能路径,当m,n分别取值:(1,1), (1,2), (2,2), (2,3), (3,3), (3,4), (4,4), (4,5), (5,5), (5,6), (6,6)

得到的路径数量依次为:1,1,2,3,6,10,20,35,70,126,252 看起来好像是某个数列? 也是好多年不写算法了,竟然都推不出路径对应的数学公式了!搜索到一个公式:(m-1 + n-1)! / (m-1)!(n-1)!   即:m+n-2的阶乘 除以 m-1的阶乘和n-1的阶乘的乘积。后面的应该加小括号括起来:

180056_yMU9_170216.png

我写了一段Haskell来验证一下这个公式的结果:

 

183916_AQc0_170216.png

输出结果为:

[(1,1),(1,2),(2,2),(2,3),(3,3),(3,4),(4,4),(4,5),(5,5),(5,6),(6,6),(6,7),(7,7),(7,8),(8,8),(8,9),(9,9),(9,10),(10,10),(10,11)]

[1,1,2,3,6,10,20,35,70,126,252,462,924,1716,3432,6435,12870,24310,48620,92378]

还有人用c++写了一个路径计算公式:  

我拿来改了一下验证了结果应该没错。

转载于:https://my.oschina.net/jsk/blog/656214

你可能感兴趣的文章
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>