题目描述 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;
}
运行时间竟然排到第一,哎呀妈呀,我的小心脏真是受不了,算是对自己的鼓励,再接再励。
注意点
- 上下左右设置数值要保证,上下为相反数,左右为相反数,且正交方向的数值大小要拉开,避免左走一步为 -2,上走两步为 2(往上没走一步计数 1),此时没在原点,却使程序认为返回原点的情况。
小谈
- 原先一直以为 C 语言不行了,毕竟现在都鼓吹 python,JAVA, 没想到最近学 word2vec ,发现 word2vec 源代码用 C 语言写的,所以学学 C 还是好的。 当然了,在全民 AI 的年代,python, JAVA 也是必须要掌握滴。