【数组】机器人能否返回原点

题目描述。

在二维平面上,有一个机器人从原点(0,0)开始。给出它的移动顺序,判断这个机器人在完成移动后能否在(0,0)出结束。

移动顺序由字符串moves表示。字符move[i]表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。

如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false

示例 1:

输入: moves = "UDLR"
输出: true
解释:机器人向上移动一次,然后向下移动一次,向左移动一次,最后向右移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。

解题思路

思路1:

直接模拟,即每次都按照给出的字符做移动,对应:上(-1,0)、下(1,0)、左(0,-1)、右(0,1);每次都做加法操作:p[0] + d[0]、p[1] + d[1];最后比较p[0]==0&&p[1]==0

代码实现1:


import java.util.HashMap;
import java.util.Map;

class Solution {


    public boolean judgeCircle(String moves) {
        int[] p = new int[]{0, 0};

        Map<Character, int[]> map = new HashMap<Character, int[]>();

        map.put('R', new int[]{0, 1});
        map.put('L', new int[]{0, -1});
        map.put('U', new int[]{-1, 0});
        map.put('D', new int[]{1, 0});

        for (int i = 0; i < moves.length(); i++) {
            int[] d = map.get(moves.charAt(i));
            p[0] += d[0];
            p[1] += d[1];
        }

        return p[0] == 0 && p[1] == 0;

    }
}

思路2:

直接计算移动次数,即左移次数(l)、右移次数(r)、上移次数(u)、下移次数(d);然后比较确保:l==r && u==d

代码实现2:


    public boolean judgeCircle(String moves) {

        int r = 0;
        int l = 0;
        int u = 0;
        int d = 0;


        for (int i = 0; i < moves.length(); i++) {
            switch (moves.charAt(i)) {
                case 'R':
                    r++;
                    break;
                case 'L':
                    l++;
                    break;
                case 'U':
                    u++;
                    break;
                case 'D':
                    d++;
                    break;
                default:
                    throw new RuntimeException("不合法的字符");
            }

        }

        return r == l && u == d;

    }

总结

这道题是一个简单题,第一种解法使用了map,并且对位置做加法,耗时比较高;通过第二种解法降低了计算复杂度,耗时也下降了不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值