LettCode 刷了一些题了,今天开始记录每一次的刷题过程吧。
657. Judge Route Circle
题目分析
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.
看一下这道题目还是很简单,就是输入一个字符串依次判断是R,L,U,D中的某一个字符表示在相应方向上移动一格,判断最后能否回到出发点。
思路
最初思路:设置一个原点piont_x=0,piont_y=0;左右移动为x轴,右移x加一,左移x减1,上下类似。最后判断piont的位置是否还在原点即可。时间复杂度O(n);
优化:思考一下如果移动的步数为奇数,则必定不能够回到原点。所以最初可以判断一下输入字符串的长度,如果是奇数可以直接返回false。
我的代码
class Solution {
public boolean judgeCircle(String moves) {
int piont_X = 0,piont_Y = 0;
if(moves.length()%2 != 0)
return false;
for(int i =0 ;i<moves.length();i++){
char tmp = moves.charAt(i);
switch(tmp) {
case 'R':piont_X++;break;
case 'L':piont_X--;break;
case 'U':piont_Y++;break;
case 'D':piont_Y--;break;
default:System.out.println("出现非法字符");break;
}
}
if(piont_X == 0 && piont_Y == 0)
return true;
else
return false;
}
}
大神的代码
class Solution {
public boolean judgeCircle(String moves) {
byte[] bytes = new byte[128];
for(char i : moves.toCharArray()){
bytes[i]++;
}
return bytes['R'] == bytes['L'] && bytes['U'] == bytes['D'];
}
}
对比深思
1.大神这里用了Java的增强for循环,把代码简化了不少,时间复杂度应该没有变吧。
2.这里的思路用了如果能够回到原点,则往左与往右(上下)的移动次数必定相等。