阿里2016面试笔试题目之棋盘走法
2015-08-30 15:08
501 查看
考试的时候遇到个题目根本就没想到和递归有什么关系,现在回想起来阿里考得其实都是算法题目
题目:在如下4*5的矩阵中,请计算从A移动到B一共有______种走法?要求每次只能向上或向右移动一格,并且不能经过P。
方法一:写出每个格子的路径种数,其中,每个格子的路径种数 = 左边格子种数 + 下边格子种数
首先考虑没有阻碍的时候,假设在任意MXN(题上为4X5)的这种格子上,从A出大到B的不同走法为f(M,N),则根据递推可知f(M,N)=f(M-1,N)+f(M,N-1),等号右边两项分别是在当前点向下走一步和向左走一步的情况。递归终止情况为f(1,1)=1;
在有阻碍的时候,如题。
从A出发到X的走法步数为f(4,2),到达X后只有一种走法,即一直向右
从A出发到Y的走法步数为f(2,4),到达Y后有f(3,2)种走法,因此连接的总数为f(2,4)*f(3,2)。
至此唯一没有涵盖的走法为经Z点至B点,此种走法有且仅有1种。
所以总数目为f(4,2)+f(2,4)*f(3,2)+1 = 17;
方法一:利用组合数解决
不考虑经过P:从A到B必须要向上走3步,向右走4步,所以从A到B,一共有C(7,3)种走法
考虑经过P:从A到P必须要向上走2步,向右走2步,所以一共是C(4,2)种
从P到B必须要向上走1步,向右走2步,所以一共是C(3,1)种
则考虑P,从A到B一共有C(7,3)-C(4,2)*C(3,1) = 17种走法
题目:在如下4*5的矩阵中,请计算从A移动到B一共有______种走法?要求每次只能向上或向右移动一格,并且不能经过P。
方法一:写出每个格子的路径种数,其中,每个格子的路径种数 = 左边格子种数 + 下边格子种数
首先考虑没有阻碍的时候,假设在任意MXN(题上为4X5)的这种格子上,从A出大到B的不同走法为f(M,N),则根据递推可知f(M,N)=f(M-1,N)+f(M,N-1),等号右边两项分别是在当前点向下走一步和向左走一步的情况。递归终止情况为f(1,1)=1;
在有阻碍的时候,如题。
从A出发到X的走法步数为f(4,2),到达X后只有一种走法,即一直向右
从A出发到Y的走法步数为f(2,4),到达Y后有f(3,2)种走法,因此连接的总数为f(2,4)*f(3,2)。
至此唯一没有涵盖的走法为经Z点至B点,此种走法有且仅有1种。
所以总数目为f(4,2)+f(2,4)*f(3,2)+1 = 17;
方法一:利用组合数解决
不考虑经过P:从A到B必须要向上走3步,向右走4步,所以从A到B,一共有C(7,3)种走法
考虑经过P:从A到P必须要向上走2步,向右走2步,所以一共是C(4,2)种
从P到B必须要向上走1步,向右走2步,所以一共是C(3,1)种
则考虑P,从A到B一共有C(7,3)-C(4,2)*C(3,1) = 17种走法
相关文章推荐
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
- 华为面试:字符逆序
- 华为面试题:(练习用)挑7
- 面试题27.二叉搜索树与双向链表
- 面试题33把数组排成最小的数
- 《剑指Offer》面试题:二维数组中的查找
- 苦逼的程序员
- Java GC 面试问题
- 面试搜集
- 面试题 输入两个很大的正数(用C字符串表示),输出它们的乘积,不考虑非法输入
- 《剑指Offer》面试题:替换空格
- 面试---技术
- 常用面试编程例子
- 黑马程序员 --- NSArray和NSMutableArray的用法
- Web前端面试总结
- 记录真实想法,在路上不断前行——关于工作,学习,职场
- java基础面试题(2)
- java基础的面试题(一)
- 一个经典编程面试题的“隐退”