牛客网---2016---美团拜访
来源:互联网 发布:udp广播 会堵塞网络吗 编辑:程序博客网 时间:2024/06/07 04:43
兔子今天把数据分析了一下,没有任何可以用于预测的信息,唯一能用的数据就是地理位置,其余并没有什么特别棒的,只能明天再找一个数据了,这个数据看了下貌似真的不行。。。就很难受。。。
题目:
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
输入:
[[0,1,0],[2,0,0]],2,3
输出:
返回:2
解析:
1 . 根据小弟的理解,这个题考虑的肯定是最短路径,所以在我看来,实际上就是通过判断改点在那侧来决定他的走位,并且最多只能有两种走位方式,还要考虑-1不能走的情况。
2 . 经过分析,分成一下几种情况:
a. 推销员所在位置和商家所在位置不处于同一条直线上时,则有两种走路方式,结果+1,若有一个-1,则只有一种走路方式,结果不变,若两者均为-1,则没有走路方式,结果-1。
b. 推销员所在位置和商家所在位置处于同一条直线上,则只有一种走路方式,结果不变,若路口被-1堵死,则结果-1。
解题所需函数:
1 . 这段代码唯一重点的东西就是a>b?c:d;
// 满足条件是c,不满足条件是dint xMove = x1<x2?1:-1;int yMove = y1<y2?1:-1;
代码:
package test;import java.util.*;public class niuke { // 默认有一条路,肯定有的嘛 static int count = 1; public static void main(String[] args){ int [][]a={{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,2}}; int q=countPath(a,8,3); System.out.println(q); } public static int countPath(int[][] map, int n, int m) { // write code here // 首先确定两个人物的位置 int startx=0,starty=0,endx=0,endy=0; // 用于循环 int i,j; for(i=0;i<n;i++){ for(j=0;j<m;j++){ if(map[i][j]==1){ startx=i; starty=j; } if(map[i][j]==2){ endx=i; endy=j; } } } // 开始走路了,当经理走不到商家地点时,就一直迭代嘛,蠢萌蠢萌的兔子决定使用迭代了 caluRes(map,startx,starty,endx,endy); return count; } // 需要传递Map,起点和重点 private static void caluRes(int[][] map, int x1, int y1, int x2, int y2){ // 确认运动趋势,一行代码解决好几行代码的典型语句 int xMove = x1<x2?1:-1; int yMove = y1<y2?1:-1; if(x1!=x2 && y1!=y2){ //开始移动 if(map[xMove+x1][y1]==0 && map[x1][yMove+y1]==0){ // 有两条路可以选择 count++; caluRes(map,xMove+x1,y1,x2,y2); caluRes(map,x1,yMove+y1,x2,y2); }else if(map[xMove+x1][y1]==-1 && map[x1][yMove+y1]==-1){ // 两条路都不可以走 count--; }else if(map[xMove+x1][y1]==0){ // 有一条路可以走 caluRes(map,xMove+x1,y1,x2,y2); }else{ caluRes(map,x1,yMove+y1,x2,y2); } }else if(x1==x2 && y1!=y2){ // 两个点处于同一条竖线上 if(map[x1][yMove+y1]==0){ caluRes(map,x1,yMove+y1,x2,y2); }else if(map[x1][yMove+y1]==-1){ count--; }else{ return; } }else if(y1==y2 && x1!=x2){ // 两个点处于同一条横线上 if(map[xMove+x1][y1]==0){ caluRes(map,xMove+x1,y1,x2,y2); }else if(map[xMove+x1][y1]==-1){ count--; }else{ return; } }else{ return; } } }
老娘表示这个代码放在eclipse里面是可以运行的,为啥他那边有问题,我也不知道为啥了,啧啧,明天在研究吧,我今天着急回家跑步。。。
没错,兔子的运动有在坚持,只是昨天狼人杀的有点爽,所以嘞,昨天没运动,今天必须要运动了,也吃不到饭了。。。
阅读全文
0 0
- 牛客网---2016---美团拜访
- 学院团拜-跳舞
- 牛客网---2016---美团最大差值
- 牛客网---2016---美团平均年龄
- 牛客网---2016---美团字符串计数
- 牛客网---2016---美团棋子翻转
- 牛客网---2016---美团字符编码
- 牛客网--2016--美团奇数位丢失
- 牛客网---2016---美团二维数组打印
- 牛客网---2016---美团股票交易日
- 美
- 美
- 美
- 美
- 美
- 美
- 美
- 牛客网---2016---美团直方图内最大矩形
- SpringBoot+SpringSecurityOAuth2.0 实现SSO单点登录(一)--客户端
- android应用签名
- java.lang.NoSuchMethodException:
- 【C#语言基础】重写和覆盖
- SpringBoot整合MyBatis
- 牛客网---2016---美团拜访
- 第二章:2.1 在windows下安装Django
- 设计模式原则(2):里氏替换原则
- java web中相对路径和绝对路径的获取
- Android 截屏
- Nodejs 的下载、安装和环境变量配置
- jquery select chosen 动态绑定值
- kafka设计与原理
- Edison平台eclipse环境下通过MRAA库使用IIC、SPI、UART例程(BMI160、MS8607)