LeetCode 657. 判断路线成圈

匿名 (未验证) 提交于 2019-12-03 00:27:02

初始位置 (0, 0) 处有一个机器人。给出它的一系列动作,判断这个机器人的移动路线是否形成一个圆圈,换言之就是判断它是否会移回到原来的位置

移动顺序由一个字符串表示。每一个动作都是由一个字符来表示的。机器人有效的动作有 R(右),L(左),U(上)和 D(下)。输出应为 true 或 false,表示机器人移动路线是否成圈。

示例 1:

输入: "UD" 输出: true

示例 2:

输入: "LL" 输出: false


第一种方法,计数法,分别给UD和RL计数,计数器分别为x,y,遇到U或R,x++或y++;遇到R或L,x--或y--;如果最后x和y为0,则返回true,否则返回false;

    public static boolean judgeCircle(String moves) {     	char a[]=moves.toCharArray();     	int x=0,y=0;     	for(char c:a) {     		if(c=='L')x++;     		if(c=='R')x--;     		if(c=='U')y++;     		if(c=='D')y--;     	} 		return x==0&&y==0;     	     }

第二种方法,用HashMap计数,然后再分别判断R和L或U和D数量是否相等(没通过,可能是时间复杂度太大)

    public static boolean judgeCircle(String moves) {     	char []a=moves.toCharArray();     	HashMap<Character, Integer> map=new HashMap<>();     	for(int i=0;i<a.length;i++) {     		if(map.containsKey(a[i])) {     			map.put(a[i], map.get(a[i])+1);     		}else     			map.put(a[i], 1);     	}     	boolean flag1=false,flag2=false;     	if(map.containsKey('R')&&map.containsKey('L')) {     		if(map.get('R')==map.get('L'))     			flag1=true;     	}     	     	if(map.containsKey('U')&&map.containsKey('D')) {     		if(map.get('U')==map.get('D'))     			flag2=true;     	}     	if(!map.containsKey('R')&&!map.containsKey('L')) flag1=true;     	if(!map.containsKey('U')&&!map.containsKey('D')) flag2=true;     	if
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!