leadcode的Hot100系列--62. 不同路径--简单的动态规划
题目比较清晰,简单来说就是:
| A | B | C | D |
|---|---|---|---|
| E | F | G | H |
| I | J | K | L |
只能往右或者往下,从A到L,能有几种走法。
这里使用动态规划的方法来做一下。
动态规划最重要的就是动态方程,这里简单说下这个动态方程怎么做出来的吧。
记 f(B) 为 A到B总共可以有的走法。
想知道f(L),那其实只要知道f(H)和f(K)就可以了。
因为从A到H之后,再想到L就只有一种方法,AK同理,所以 f(L) = f(H) + f(K)。
那f(H)呢,就等于 f(D)+f(G),这里就很容易得到他的动态方程:
f [i] [j] = f [i] [j-1] + f [i-1] [j] // i 代表行,j 代表列
得到状态方程之后,最后再考虑一下边界的情况,也就是 f(A) f(B) f(E) f(I) 等。
因为题目已经规定了,只能往右走,或者往下走,
所以第一行的走法都是只有1,第一列的走法也是只有1,可以得到:
| 1 | 1 | 1 | 1 |
|---|---|---|---|
| 1 | f(F) | f(G) | f(H) |
| 1 | f(J) | f(K) | f( L) |
so:f(F) = f(B) + f(E) = 1 + 1 = 2
f(G) = f(C) + f(F) = 1 + 2 = 3
f(H) = f(D) + f(G) = 1 + 3 = 4
f(J) = f(I) + f(F) = 1 + 2 = 3
f(K) = f(G) + f(J) = 3 + 3 = 6
f(L) = f(H) + f(K) = 4 + 6 = 10
这里附上代码:
int uniquePaths(int m, int n){
int dp[100][100]={0}, i, j;
for (i=0; i<m; i++) // 这里初始化第一列的走法为1
dp[i][0] = 1;
for (i=0; i<n; i++) // 这里初始化第一行的走法为1
dp[0][i] = 1;
for (i=1; i<m; i++)
{
for (j=1; j<n; j++)
{
dp[i][j] = dp[i-1][j] + dp[i][j-1]; // 动态方程
}
}
return dp[m-1][n-1];
}
leadcode的Hot100系列--62. 不同路径--简单的动态规划的更多相关文章
- leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划
如果这个: leadcode的Hot100系列--62. 不同路径--简单的动态规划 看懂的话,那这题基本上是一样的, 不同点在于: 1.这里每条路径相当于多了一个权值 2.结论不再固定,而是要比较不 ...
- leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种想法的应用
提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来. 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在 ...
- leadcode的Hot100系列--二叉树创建和遍历
很多题目涉及到二叉树,所以先把二叉树的一些基本的创建和遍历写一下,方便之后的本地代码调试. 为了方便,这里使用的数据为char类型数值,初始化数据使用一个数组. 因为这些东西比较简单,这里就不做过多详 ...
- leadcode的Hot100系列--78. 子集--回溯
上一篇说了使用位运算来进行子集输出,这里使用回溯的方法来进行排序. 回溯的思想,我的理解就是: 把解的所有情况转换为树或者图,然后用深度优先的原则来对所有的情况进行遍历解析. 当然,因为问题中会包涵这 ...
- leadcode的Hot100系列--78. 子集--位运算
看一个数组的子集有多少,其实就是排列组合, 比如:[0,1] 对应的子集有:[] [0] [1] [1,1] 这四种. 一般对应有两种方法:位运算 和 回溯. 这里先使用位运算来做. 位运算 一个长度 ...
- leadcode的Hot100系列--155. 最小栈
栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来. push,对应入电梯,把数据往里面压 po ...
- leadcode的Hot100系列--206. 反转链表
这里使用两种方式, 一个是直接从头往后遍历 -------> 迭代 一个是从最后一个往前遍历 -----> 递归 迭代 定义三个变量:pPre pNext pNow pPre表示当前节点的 ...
- leadcode的Hot100系列--104. 二叉树的最大深度
依然使用递归思想. 思路: 1.树的深度 = max (左子树深度,右子树深度)+ 1 . ------> 这里的加1是表示自己节点深度为1. 2.如果当前节点为null,则说明它的左右子树深度 ...
- leadcode的Hot100系列--226. 翻转二叉树
这玩意儿基本上还是遍历的那一套, 这里使用先序遍历的方式,直接对左右子树进行对调即可. (虽然看题目的时候,感觉都一样,但真正写出来之后,印象还是深刻了很多) struct TreeNode* inv ...
随机推荐
- react项目实践——(2)webpack-dev-serve
webpack-dev-server是一个小型的静态文件服务器,为webpack打包的资源文件提供Web服务.并且提供自动刷新和Hot Module Replacement(模块热替换:前端代码变动后 ...
- 【Android先进】如何使用数据文件来保存程序
在程序,有许多方法来存储和检索数据,本文,它描述了如何使用文件系统来保存数据编程和读取操作 我直接写了一个帮助类,进行文件的写入和读取操作 /** * 用于在文件里保存程序数据 * * @author ...
- windows添加本地文件托管到新增github库
新增repositoy.登录gitHub,并点击“New Reposoitory” 写入名字 之后点击“create resposity” \ 按照上图中的步骤可以完成.以下为完成步骤. 2. 在本 ...
- win10限制访问解决
你的IT管理员已经限制对此应用一些区域的访问,你尝试访问的项目不可用.有关详细,请与你的IT支持人员联系. 按下win+s打开Cortana,在框中输入命令提示符,右键管理员身份运行在命令提示符中输入 ...
- AngularJS $http和$.ajax
$http请求 $http请求返回之后,给前台绑定数据赋值,会自动更新数据 ajax请求 $.ajax请求返回之后,给前台绑定数据赋值,不会自动更新数据,需要用$scope.$apply手动刷新 ap ...
- c#中的GetUpperBound,GetLowerBound方法
今天使用数组的时候,用到了几个数组的属性,总结如下: Array的Rank 属性:语法:public int Rank { get; } 得到Array的秩(维数).Array的GetUpperBou ...
- winform实现DataGridView全选
之前写过,一时想不起来就在网上找了一些.结果感觉好麻烦.于是就自己打开之前做过的功能.找到源码. private void CheckDatabasexuan() { DataGridViewChec ...
- Windows 10开发基础——VS2015 Update1新建UWP项目,XAML设计器无法加载的解决
这次,我们来解决一个问题...在使用Visual Studio 2015 Update 1的时候,新建一个UWP的项目,XAML设计器就会崩,具体异常信息如下图: 解决方法如下:下面圈出的那个路径就按 ...
- Win8Metro(C#)数字图像处理--2.5图像亮度调整
原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整 2.5图像亮度调整函数 [函数名称] 图像亮度调整函数BrightnessAdjustProcess(WriteableBit ...
- WPF如何判断PNG中的点是透明的
最近想用WPF做个空战游戏,其中就要解决子弹是否击中飞机的问题.这里面飞机用了PNG图片,大家都知道飞机是不规则图案,如何判断子弹碰撞成了一个难题. 好在我在网上找到了一个可以获取bitmap像素点颜 ...