1. 题目背景与核心需求
LeetCode 657题"机器人能否返回原点"是一道看似简单却暗藏玄机的算法练习题。题目描述很简单:给定一个机器人移动指令序列(由'U'、'D'、'L'、'R'四种字符组成,分别表示上下左右移动),判断执行完所有指令后机器人是否能回到原点。
这道题之所以被称为"先飞的笨鸟",是因为它完美诠释了算法学习中的一个重要现象——看似简单的题目往往能检验出程序员的基础功底。就像笨鸟先飞一样,只有扎实掌握基础概念,才能在解决这类问题时游刃有余。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题分析与解法思路
2.1 直观解法:坐标模拟法
最直接的思路是模拟机器人移动过程。我们可以初始化坐标(0,0),然后遍历指令字符串:
python复制def judgeCircle(moves: str) -> bool:
x, y = 0, 0
for move in moves:
if move == 'U':
y += 1
elif move == 'D':
y -= 1
elif move == 'L':
x -= 1
elif move == 'R':
x += 1
return x == 0 and y == 0
这种方法时间复杂度O(n),空间复杂度O(1),完全满足题目要求。但作为"先飞的笨鸟",我们需要思考更深入的问题:这种解法有什么可以优化的地方?是否存在边界情况需要考虑?
2.2 优化思路:计数法
仔细观察会发现,机器人能否回到原点只取决于上下移动次数是否相等,左右移动次数是否相等。因此我们可以简化计算:
python复制def judgeCircle(moves: str) -> bool:
return moves.count('U') == moves.count('D') and moves.count('L') == moves.count('R')
这种写法更简洁,但实际性能取决于语言内置count方法的实现。在Python中,str.count()需要遍历整个字符串,所以时间复杂度实际上是O(4n),虽然
