经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
LeetCode | 机器人能否返回原点
来源:cnblogs  作者:tosser  时间:2019/10/8 9:10:03  对本文有异议

      放假的时间已经过去一半了,每天坚持看一个多小时的书,时间虽然不多,但是能专心把书看进去就可以了。今天分享的是 LeetCode 上面的第 657 题,题目是《机器人能否返回原点》,这也是一道简单的题。

 

LeetCode 题库的第 657 题——机器人能否返回原点

      题的解法也很简单,先定义坐标,并设置坐标为(0, 0),然后按照给定的方向去移动,在移动的过程中修改方向,移动完以后再次判断坐标是否为(0, 0)即可。代码如下:

  1. 1 bool judgeCircle(char* moves) {
  2. 2 int x = 0;
  3. 3 int y = 0;
  4. 4
  5. 5 int len = strlen(moves);
  6. 6
  7. 7 int i;
  8. 8
  9. 9 for ( i = 0; i < len; i ++ ) {
  10. 10 switch ( moves[i] ) {
  11. 11 case 'U': {
  12. 12 y ++;
  13. 13 break;
  14. 14 }
  15. 15 case 'D': {
  16. 16 y --;
  17. 17 break;
  18. 18 }
  19. 19 case 'L': {
  20. 20 x --;
  21. 21 break;
  22. 22 }
  23. 23 case 'R': {
  24. 24 x ++;
  25. 25 break;
  26. 26 }
  27. 27 }
  28. 28 }
  29. 29
  30. 30 if ( x == 0 && y == 0 ) {
  31. 31 return 1;
  32. 32 }
  33. 33
  34. 34 return 0;
  35. 35 }

      LeetCode 有关于代码执行时间和内存消耗的提示,上面的代码执行的时间是 8 ms,可以试着进行优化。试想一下,如果步数是单步,肯定无法回到原点,而步数是偶数步则可能会回到原点,因此可以增加一个判断,增加后的代码如下:

  1. 1 bool judgeCircle(char* moves) {
  2. 2 int x = 0;
  3. 3 int y = 0;
  4. 4
  5. 5 int len = strlen(moves);
  6. 6
  7. 7 if ( len % 2 != 0 ) {
  8. 8 return 0;
  9. 9 }
  10. 10
  11. 11 int i;
  12. 12
  13. 13 // 这里和上面的代码相同
  14. 14
  15. 15 if ( x == 0 && y == 0 ) {
  16. 16 return 1;
  17. 17 }
  18. 18
  19. 19 return 0;
  20. 20 }

      增加了上面的判断之后,代码由原来的 8 ms 变成了 4 ms,这也算是有了很大的提高。我试着把 y 变量去掉,只使用一个 x 变量去解决该问题,但是代码会有 bug,虽然 LeetCode 中的测试用例没有测试出来,但是时间又回到了 8 ms。至于其他的解决方法,就不再去想了。


欢迎大家关注微信公众号:“码农UP2U”

原文链接:http://www.cnblogs.com/tosser/p/11619800.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号