[LeetCode]-657. Judge Route Circle

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.这里的思路用了如果能够回到原点,则往左与往右(上下)的移动次数必定相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值