本文最后更新于 2024-06-25,文章内容可能已经过时。

思路

暴力双重循环解题,结果有一个例子过不去,超时了。

看了大佬的解法,厉害。

代码

func robot(command string, obstacles [][]int, x int, y int) bool {
	curX := 0
	curY := 0
	i := 0
	for curX <= x && curY <= y {
		if command[i] == 'U' {
			curY++
		}
		if command[i] == 'R' {
			curX++
		}
		for _, v := range obstacles {
			if v[0] == curX && v[1] == curY {
				return false
			}
		}
		i = (i + 1) % len(command)
		if curX == x && curY == y {
			return true
		}
	}
	return false

}

func robot(command string, obstacles [][]int, x int, y int) bool {
	// 如果目标点不在路径上,返回失败
	if !isOnThePath(command, x, y) {
		return false
	}
	for _, o := range obstacles {
		// 判断有效的故障点是否在路径上(故障的步数大于等于目标的点,视为无效故障)
		if (x+y > o[0]+o[1]) && isOnThePath(command, o[0], o[1]) {
			return false
		}
	}
	return true
}

func isOnThePath(command string, x int, y int) bool {
	uNum := strings.Count(command, "U")*((x+y)/len(command)) + strings.Count(command[0:(x+y)%len(command)], "U")
	rNum := strings.Count(command, "R")*((x+y)/len(command)) + strings.Count(command[0:(x+y)%len(command)], "R")
	if uNum == y && rNum == x {
		return true
	}
	return false
}

作者:yld
链接:https://leetcode.cn/problems/programmable-robot/solutions/58897/pan-duan-mou-dian-shi-fou-zai-lu-jing-shang-by-yld/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。