您的位置:首页 > 编程语言 > Java开发

LintCode 114 不同的路径

2016-12-25 15:14 295 查看

本人电子系,只为一学生。心喜计算机,小编以怡情。

有一个机器人的位于一个M×N个网格左上角(下图中标记为’Start’)。

机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为’Finish’)。

问有多少条不同的路径?

第一次尝试用的递归,超时了,失败了。。。

public int uniquePaths(int m, int n)
{
// write your code here
if(n==1||m==1) return 1;
return uniquePaths(m, n-1)+uniquePaths(m-1, n);
}


然后发现要用动态规划。。。

然而我还没学。。于是看了爬楼梯和数兔子,迷迷糊糊

反正序列规律是1,2,3,5,8,13,21……..

然后我就猜着写了代码,第一次失败了,原因在注释,后来改了,成功了

public int uniquePaths(int m, int n) {
// write your code here
if(n==1||m==1) return 1;

int temp[][]=new int [m]
;//带记忆功能的,以空间作为代价减轻时间,不过应该有更好的方法,我暂时没想到
//////////////////////////////
for(int i=1;i<m;i++)
temp[i][0]=1;
for(int j=1;j<n;j++)
temp[0][j]=1;
//这段必须有,要给边界初始化为1。没有这段的话比如2*3矩阵,最右下角元素=左边值+上边值,
//结果上边是0的话显然是错误的,因为上边(是边界)必然有一条道路
///////////////////////////
temp[0][1]=1;
temp[1][0]=1;
//中规中矩的动态规划
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
{
//当前的次数=左边的次数+上面的次数
temp[i][j]=temp[i-1][j]+temp[i][j-1];
}
return temp[m-1][n-1];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LintCode Java