LeetCode(1041 困于环中的机器人)

如题
在这里插入图片描述
最直观的思路那自然是,按照路径走判断是否可以回到原点即可,但是需要注意的是,一次回到原点不是所有路径,由于有4个方向,那么最多是需要4次回到原点。由此第一种方案

String str =instructions+instructions+instructions+instructions;
        int x=0;
        int y=0;
        int flag = 0;  //方向判断 0右 1下 2左 3上
		for(int i=0;i<str.length();i++) {
			char ch =str.charAt(i);
			switch(ch) {
				case('G'):
					switch(flag) {
					case(0):
						x++;
						break;
					case(1):
						y++;
						break;
					case(2):
						x--;
						break;
					case(3):
						y--;
					}
					break;
				case('L'):
					if(flag==0) {
						flag=3;
					}else {
						flag--;
					}
					break;
				case('R'):
					if(flag==3) {
						flag=0;
					}else {
						flag++;
					}
			}
		}		
		return x==0&&y==0;			
		
    }

结果在这里插入图片描述
需要遍历4倍字符串,不够优雅,有没有只需要遍历一次的,自然是有。将上面的退出条件摊开,其实分为三种情况。第一种,一次回到原点的,不需要讨论。第二种,两次回到原点的,这种情形对应的是,一次没回到原点,但是最终结束的时候掉了个头。第三种,4次的则是对应结束时左右转弯的。没错,唯一不能形成环的就是一路向西了。

	public boolean isRobotBounded1(String instructions) {
		int x=0;
        int y=0;
        int flag = 0;  //方向判断 0右 1下 2左 3上
		for(int i=0;i<instructions.length();i++) {
			char ch =instructions.charAt(i);
			switch(ch) {
				case('G'):
					switch(flag) {
					case(0):
						x++;
						break;
					case(1):
						y++;
						break;
					case(2):
						x--;
						break;
					case(3):
						y--;
					}
					break;
				case('L'):
					if(flag==0) {
						flag=3;
					}else {
						flag--;
					}
					break;
				case('R'):
					if(flag==3) {
						flag=0;
					}else {
						flag++;
					}
			}
		}		
		return (x==0&&y==0)||flag!=0;					
	}

结果在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值