
美丽联合2019届校招 测试类 笔试题 算法题 方格走法
发布日期:2021-05-09 04:15:18
浏览次数:14
分类:博客文章
本文共 1211 字,大约阅读时间需要 4 分钟。
编程题]方格走法
- 热度指数:40 时间限制:1秒 空间限制:32768K
有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。
给定两个正整数int x,int y,请返回小团的走法数目。
输入描述:
输入包括一行,空格隔开的两个正整数x和y,取值范围[1,10]。
输出描述:
输出一行,表示走法的数目
示例1
输入
3 2
输出
10 思路分析 直接用递归就能简单明了的解决: 例如输入1,1 (2*2的方格) 递归过程中会存在如下三种情况: ① 网格上一个点有两条路可走(一个节点有两个儿子节点), 例如当x=0,y=0 时,可向下或向右走 ,所以 return f(++x,y)+f(x,++y) ② 在边界的情况下,一个节点只有一个儿子节点,只有一条路可走, 例如: 当x=0,y=1 时,y已经到了边界值, 所以 return f(++x,y) 或 当x=0,y=1 时,y已经到了边界值, 所以 return f(x,++y)
③ 递归到终点(递归到树的叶子结点)后走法加一 例如:当x=1,y=1时,已经到目标位置,所以return 1 如果是按上面思路,从左上往右下走,还有给递归函数另外另个两个参数最为边界值判断, 所以,不如直接终点变起点,起点变终点,从终点开始,向上或向左走,边界值只需要判断是否大于0就行了,因为0就是x和y的边界 Java 递归代码如下
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sca = new Scanner(System.in); int x = sca.nextInt(); int y = sca.nextInt(); System.out.println(f(x,y)); } public static int f(int x,int y){ if(x==0&&y==0) return 1; else if(x==0 && y>0){ return f(x,--y); } else if(y==0 && x>0){ return f(--x,y); } else{ return f(x,--y)+f(--x,++y); //在这为啥要++y?因为前面是向左走(--y)了,而后面是向上走(--x),所以y不能变,要加回来 } }}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月08日 08时51分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
DataStax Bulk Loader教程(四)
2021-05-09
Hibernate入门(四)---------一级缓存
2021-05-09
[Python学习笔记]组织文件
2021-05-09
快服务流量之争:如何在快服务中占领一席之地
2021-05-09
Spring Boot 2.x基础教程:构建RESTful API与单元测试
2021-05-09
dojo/request模块整体架构解析
2021-05-09
互联网App应用程序测试流程及测试总结
2021-05-09
如何使用google搜索?
2021-05-09
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
2021-05-09
(在模仿中精进数据可视化07)星球研究所大坝分布可视化
2021-05-09
(数据科学学习手札27)sklearn数据集分割方法汇总
2021-05-09
从零开始学安全(十六)● Linux vim命令
2021-05-09
阿里巴巴Json工具-Fastjson教程
2021-05-09
Spring Cloud Gateway - 快速开始
2021-05-09
Java对象转JSON时如何动态的增删改查属性
2021-05-09
Python 面向对象进阶
2021-05-09
Linux常用统计命令之wc
2021-05-09
并发编程——IO模型详解
2021-05-09
Java之封装,继承,多态
2021-05-09