leetcode 874. 模拟行走机器人
【题目】874. 模拟行走机器人
机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:
- -2:向左转 90 度
- -1:向右转 90 度
- 1 <= x <= 9:向前移动 x 个单位长度
在网格上有一些格子被视为障碍物。
第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1])
机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。
返回从原点到机器人的最大欧式距离的平方。
示例 1:
输入: commands = [4,-1,3], obstacles = []
输出: 25
解释: 机器人将会到达 (3, 4)
示例 2:
输入: commands = [4,-1,4,-2,4], obstacles = [[2,4]]
输出: 65
解释: 机器人在右转走到 (4, 4) 之前被(2,4)挡住,将被困在 (1, 4) 处,然后左转走到(1,8)
提示:
0 <= commands.length <= 10000
0 <= obstacles.length <= 10000
-30000 <= obstacle[i][0] <= 30000
-30000 <= obstacle[i][1] <= 30000
答案保证小于 2 ^ 31
【解题思路1】
class Solution {public int robotSim(int[] commands, int[][] obstacles) {//北,东,南,西int[][] dir={{0,1},{1,0},{0,-1},{-1,0}};Set<String> blockSet=new HashSet<>();int index=0;//初始状态为向北int x=0;//横坐标int y=0;//纵坐标int ans=0;for (int i = 0; i < obstacles.length; i++) {//一定要加分隔符,否则[1,22][22,1]都存为122blockSet.add(obstacles[i][0]+","+obstacles[i][1]);}for (int i = 0; i < commands.length; i++) {if(commands[i]==-2){index = (index+3)%4; //相当于向右转3次}else if(commands[i]==-1){index=(index+1)%4; //向右转1次,1次90度}else if(commands[i]>0){for(int j=1;j<=commands[i];j++){int xx=x+dir[index][0];//记录下一个xint yy=y+dir[index][1];//记录下一个yif(blockSet.contains(xx+","+yy)){ //遇阻break;}x=x+dir[index][0];y=y+dir[index][1];ans= java.lang.Math.max(ans,x*x+y*y);}}}return ans;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
