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

 

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

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

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

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

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

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


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

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!