网格从左下角移动到右上角有多少种路线(动态规划)
2017-11-28 22:50
513 查看
在面试中遇到的一个问题,蚂蚁从(m,n)的网格一角爬到对角(不能往回爬),查了一些东西,自己写下自己的一些理解,望大神指点。
从网格的一角爬到对角,有多少中爬法。
理解部分:
将其进行转换,转换为从(m,n)坐标到(0,0)坐标有多少种移动方法。(只能下移,左移)
。 。 。 。 。 。
。 。 。 。 。 。
1 3 6 10 。 。
1 2 3 4 。 。
0 1 1 1 。 。
如上图所示,将(m,n)点到(0,0)的路线进行一系列的细分,
(i,j)为点的位置。起始位置为(m,n)。
(m,n)= (m,n-1)+(m-1,n);有两种走法。
(m,n-1) = (m,n-2)+(m-1,n-1);即(m,n-1)点接下来有两种走法,同理(m-1,n) = (m-1,n-1)+(m-2,n);
。。。。
当(i,j)中的i=0,或者j=0时,接下来只能进行右移,或者上移,即此时只有一种走法。
即m=0,或者n=0,则只有一种走法,return 1;
代码如下:
public class GridCrawl {
public static int crawl(int m,int n){
if (m > 0 && n > 0)//该坐标可以下移或者左移
{
return crawl(m, n - 1) + crawl(m - 1, n);
}
else if ((m == 0) && (n > 0))//只可以下移
<
ad95
div style="white-space:pre-wrap;line-height:1.75;font-size:14px;">{
return crawl(m,n-1);
}
else if ((n == 0) && (m > 0))//只可以左移
{
return crawl(m-1,n);
}
else if ((m == 1 && n == 0) || (m == 0 && n == 1))
{
return 1;
}
else
return 0;
}
}
简化写法
public static int crawl(int m,int n){
if(m == 0 && n == 0)
return 0;
if(m == 0 || n == 0)
return 1;
return crawl(m-1,n)+crawl(m,n-1);
}
从网格的一角爬到对角,有多少中爬法。
理解部分:
将其进行转换,转换为从(m,n)坐标到(0,0)坐标有多少种移动方法。(只能下移,左移)
。 。 。 。 。 。
。 。 。 。 。 。
1 3 6 10 。 。
1 2 3 4 。 。
0 1 1 1 。 。
如上图所示,将(m,n)点到(0,0)的路线进行一系列的细分,
(i,j)为点的位置。起始位置为(m,n)。
(m,n)= (m,n-1)+(m-1,n);有两种走法。
(m,n-1) = (m,n-2)+(m-1,n-1);即(m,n-1)点接下来有两种走法,同理(m-1,n) = (m-1,n-1)+(m-2,n);
。。。。
当(i,j)中的i=0,或者j=0时,接下来只能进行右移,或者上移,即此时只有一种走法。
即m=0,或者n=0,则只有一种走法,return 1;
代码如下:
public class GridCrawl {
public static int crawl(int m,int n){
if (m > 0 && n > 0)//该坐标可以下移或者左移
{
return crawl(m, n - 1) + crawl(m - 1, n);
}
else if ((m == 0) && (n > 0))//只可以下移
<
ad95
div style="white-space:pre-wrap;line-height:1.75;font-size:14px;">{
return crawl(m,n-1);
}
else if ((n == 0) && (m > 0))//只可以左移
{
return crawl(m-1,n);
}
else if ((m == 1 && n == 0) || (m == 0 && n == 1))
{
return 1;
}
else
return 0;
}
}
简化写法
public static int crawl(int m,int n){
if(m == 0 && n == 0)
return 0;
if(m == 0 || n == 0)
return 1;
return crawl(m-1,n)+crawl(m,n-1);
}
相关文章推荐
- 9.9递归和动态规划(二)——有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
- 动态规划练习题-9(移动路线)
- 动态规划练习一—9移动路线
- 动态规划练习——移动路线
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- ACM-动态规划9-移动路线
- 动态规划―移动路线
- 有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 动态规划练习--09(移动路线)
- 动态规划练习一 09:移动路线
- 动态规划--移动路线
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- 动态规划练习一 移动路线
- 移动界面控件Essential Studio for Mobile MVC网格控件教程:网格控件
- 从打车软件你能想到多少?盈利模式?商机?大数据?移动互联网蛋糕?生活方式改变withApp?
- 《算法导论》中动态规划习题15-6--在棋盘上移动
- 魔兽争霸中,单位移动速度有上限吗?是多少?