LeetCode 657. Judge Route Circle

题目描述 LeetCode 657

Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.

The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R (Right), L (Left), U (Up) and D (down). The output should be true or false representing whether the robot makes a circle.

Example 1:

Input: "UD"
Output: true

Example 2:

Input: "LL"
Output: false

中文描述

题目大意是,一个机器人现在在原点,然后呢,它开始走,有且仅有四个方向,上下左右,分别用字母 'U' 'D' 'L' 'R' 来表示,给你一串字符,你来判断最后它是否返回原点,是则返回 true ,不是则返回 false。

解题思路

  • 依照题意,只有四个方向,最后判断是否返回原点,所以呢,我是不是可以把方向转化为数字呢,我的思路是,往上走,数字计 1;往下走,数字计 -1; 往左走,数字计 -2;往右走,数字计 2. 最后数字累加为0,则机器人返回原点,不为0,则还在外面逛游呢。
  • 事实证明,思路完全正确,但是数字设置有问题,为啥呢? 因为,比如 机器人左走1步,数字计 -2,然后呢,它再往上走两步,累加为 0,哇,竟然回到原点,所以数字设置有问题,解决办法,数字设置差距拉开,上下计数不变,左右计数分别为 -200, 200,运行通过。

C 语言代码

bool judgeCircle(char* moves) 
{
    bool flag;
    int length = strlen(moves);
    int i = 0;
    int sum = 0;
    
    for ( i = 0; i < length; i ++ )
    {
        if ( moves[i] == 'U' )
        {
           sum += 1;
        }
        else if( moves[i] == 'D' )
        {
           sum += -1;
        }
        else if( moves[i] == 'L' )
        {
           sum += -200;
        }
        else
        {
           sum += 200;
        }
    }
    
    if ( sum == 0)
    {
        flag = true;
    }
    else
    {
        flag = false;
    }
    
    return flag;
}

运行时间竟然排到第一,哎呀妈呀,我的小心脏真是受不了,算是对自己的鼓励,再接再励。

LeetCode 657. Judge Route Circle_第1张图片
执行结果

注意点

  • 上下左右设置数值要保证,上下为相反数,左右为相反数,且正交方向的数值大小要拉开,避免左走一步为 -2,上走两步为 2(往上没走一步计数 1),此时没在原点,却使程序认为返回原点的情况。

小谈

  • 原先一直以为 C 语言不行了,毕竟现在都鼓吹 python,JAVA, 没想到最近学 word2vec ,发现 word2vec 源代码用 C 语言写的,所以学学 C 还是好的。 当然了,在全民 AI 的年代,python, JAVA 也是必须要掌握滴。

你可能感兴趣的