经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
LeetCode LCP 3 机器人大冒险
来源:cnblogs  作者:乌克兰大野猪  时间:2019/10/8 9:10:07  对本文有异议

题目解析:

对于本题主要的核心是对于一个指令字符串如“RURUU”,如果我们假设它的终点坐标为(8,8),其实只要统计指令字符串中的R的个数和U的个数(对于我给出的例子而言,num_R == 2,num_U == 3),显然不管我们是否能到达终点,这条指令至少要走不止一遍才有可能,那么我们只要将它在达到终点前必走的x轮减去(对于我给出的例子而言x == min(8 / 2 ,8 / 3)== 2,则忽略中间走的轮数,就能把终点的位置转化为(4,2)),则就能求出最后那不足一轮的情况下需要U多少个,R多少个才能到达终点,然后遍历指令字符串,一步一步模拟即可,一旦超过终点的x或者y则永远不可能到达,对于障碍点来说也是一样,把它们当作目标点来求能否到达即可,这个判断的过程可以单独写作一个函数更为方便。解题时,我们先判断障碍点(x <= 终点x,y <= 终点y,否则根据题意,该障碍点无效)能否到达,在所有有必要判断的障碍点都不会碰到后再判断终点能否到达

本题代码:

  1. 1 class Solution {
  2. 2 public:
  3. 3 int min(int x, int y){
  4. 4 return x < y ? x : y;
  5. 5 }
  6. 6 bool judge(string command, int x_num, int y_num, int x, int y){
  7. 7 int temp = min(x/x_num, y/y_num); //temp记录最小公倍数
  8. 8 x = x - x_num*temp; //x记录的是R
  9. 9 y = y - y_num*temp; //y记录的是U
  10. 10 //此时的x和y代表终点相对于第一次循环的位置
  11. 11 if(x == 0 && y == 0) return true;
  12. 12 else{
  13. 13 int len_cmd = command.size();
  14. 14 for(int i = 0; i < len_cmd; i++){
  15. 15 if(command[i] == 'U'){
  16. 16 y--;
  17. 17 if(y < 0) return false;
  18. 18 }else{
  19. 19 x--;
  20. 20 if(x < 0) return false;
  21. 21 }
  22. 22 if(x == 0 && y == 0) return true;
  23. 23 }
  24. 24 }
  25. 25 return true;
  26. 26 }
  27. 27 bool robot(string command, vector<vector<int>>& obstacles, int x, int y) {
  28. 28 int len_cmd = command.size();
  29. 29 int x_1 = 0;
  30. 30 int y_1 = 0;
  31. 31 //统计第一轮循环能走到的地方
  32. 32 for(int i = 0; i < len_cmd; i++){
  33. 33 if(command[i] == 'R'){
  34. 34 x_1++;
  35. 35 }else{
  36. 36 y_1++;
  37. 37 }
  38. 38 }
  39. 39 //把每一个障碍点(该障碍点的x和y都要小于终点的x和y)当做是终点求能否到达 能到达则return false
  40. 40 int len_obs = obstacles.size();
  41. 41 for(int i = 0; i < len_obs; i++){
  42. 42 if(obstacles[i][0] <= x && obstacles[i][1] <= y){
  43. 43 //能到达则return false
  44. 44 if(judge(command, x_1, y_1, obstacles[i][0], obstacles[i][1]) == true) return false;
  45. 45 }
  46. 46 }
  47. 47 //如果所有的终点之内的障碍点都不会到达 则直接判断终点是否可以到达
  48. 48 if(judge(command, x_1, y_1, x, y) == true) return true;
  49. 49 else return false;
  50. 50 }
  51. 51 };

 

原文链接:http://www.cnblogs.com/findview/p/11616836.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号