查看: 1566| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 请教一道算法题目

全局:

2018(7-9月)-CS本科+fresh grad 无实习或全职 | Other| 码农类General其他@

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
各位学哥学姐好,我想请问一道算法题目是:.1point3acres
给定M*N矩阵 从(0,0)走到(0,N-1) 只能向右上、右、右下走 问总共有多少种走法. Waral dи,
.google  и
follow up是中间必须经过点(x,y).. From 1point 3acres bbs

我感觉这个题要用DP做,但是不清楚DP的两个for循环范围是什么,follow up怎么做,求学长学姐指教,谢谢


上一篇:签了offer之后不去会有什么后果?
下一篇:脸家 新题 不太会
🔗
beetle 2018-1-20 01:20:36 | 只看该作者
全局:
只能向右走,就一列一列地更新你的dp矩阵。第一列除了原点是1其他都是0,其他点都是其左边三个点的和。follow up就是分两半,先算(0,0)到(x,y)的走法a,再算(x,y)到终点的走法b,结果就是a*b
回复

使用道具 举报

🔗
zhuxinyi2017 2018-1-20 02:36:08 | 只看该作者
全局:
beetle 发表于 2018-1-20 01:20
只能向右走,就一列一列地更新你的dp矩阵。第一列除了原点是1其他都是0,其他点都是其左边三个点的和。foll ...

就是这样 space的话用一列 M size 就可以了
回复

使用道具 举报

🔗
 楼主| wjw779 2018-1-20 06:04:08 | 只看该作者
全局:
zhuxinyi2017 发表于 2018-1-20 02:36
就是这样 space的话用一列 M size 就可以了

您好,请问这里不能只用一维DP吧,因为X和Y方向都要变化。
回复

使用道具 举报

🔗
 楼主| wjw779 2018-1-20 06:05:04 | 只看该作者
全局:
beetle 发表于 2018-1-20 01:20. 1point3acres
只能向右走,就一列一列地更新你的dp矩阵。第一列除了原点是1其他都是0,其他点都是其左边三个点的和。foll ...

您好,我还是不太理解您的意思,能贴一段伪代码么,或者您看看我写的这个dp,还是不太清楚,谢谢您。

public class Solution {
        public int NumberofPath(int[][] matrix){
                int[][] dp = new int[matrix.length][matrix[0].length + 1];
                matrix[0][0] = 1;
                for (int i = 1; i < matrix.length; i++){
                        for (int j = 1; j < matrix[0].length; j++){
                                dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1] + dp[i - 1][j + 1];
                        }
                }.
                return dp[0][matrix[0].length];
        }
}
回复

使用道具 举报

🔗
bear3488 2018-1-20 08:15:07 | 只看该作者
全局:
wjw779 发表于 2018-1-20 06:05
您好,我还是不太理解您的意思,能贴一段伪代码么,或者您看看我写的这个dp,还是不太清楚,谢谢您。

...

我觉得可以用两列,因为对于当前这个点,他可以从三个方向来,左上,左下和左边,所以每次可以用第一列保存前一列的值,更新到第二列上,循环结束以后把第二列换到第一列就行了,或者直接用(j%2)和(j-1)%2来看用第几列
回复

使用道具 举报

🔗
 楼主| wjw779 2018-1-20 12:20:54 | 只看该作者
全局:
bear3488 发表于 2018-1-20 08:15
我觉得可以用两列,因为对于当前这个点,他可以从三个方向来,左上,左下和左边,所以每次可以用第一列保 ...
. From 1point 3acres bbs
求层主贴一段代码,DP还是不太清楚
回复

使用道具 举报

🔗
zhuxinyi2017 2018-1-22 08:18:29 | 只看该作者
全局:
wjw779 发表于 2018-1-20 06:04
您好,请问这里不能只用一维DP吧,因为X和Y方向都要变化。

一列就够了,  你每次必须往右走一步的,右,右上,右下,无非是dp 的话要多用几个constant space,出了区域才能update。你update 一个position 必须要在 处理到这个位置加2的地方才可以,这样不会冲突,多用几个variable 记录一下就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表