leetcode 818. Race Car
原题地址:https://leetcode.com/problems/race-car/
题目
Your car starts at position 0 and speed +1 on an infinite number line. (Your car can go into negative positions.)
Your car drives automatically according to a sequence of instructions A (accelerate) and R (reverse).
When you get an instruction “A”, your car does the following: position += speed, speed *= 2.
When you get an instruction “R”, your car does the following: if your speed is positive then speed = -1 , otherwise speed = 1. (Your position stays the same.)
For example, after commands “AAR”, your car goes to positions 0->1->3->3, and your speed goes to 1->2->4->-1.
Now for some target position, say the length of the shortest sequence of instructions to get there.
Example 1:
Input:
target = 3
Output: 2
Explanation:
The shortest instruction sequence is "AA".
Your position goes from 0->1->3.
Example 2:
Input:
target = 6
Output: 5
Explanation:
The shortest instruction sequence is "AAARA".
Your position goes from 0->1->3->7->7->6.
Note:
- 1 <= target <= 10000.
python代码
class Solution:
def racecar(self, target):
"""
:type target: int
:rtype: int
"""
if target == 0:
return 0
queue = [(0, 1)]
R = set((0, 1))
count = 0
while queue != []:
other = []
count += 1
for position, speed in queue:
pos1, sp1 = position + speed, speed * 2
if pos1 == target:
return count
if speed > 0:
pos2, sp2 = position, -1
else:
pos2, sp2 = position, 1
other.append((pos1, sp1))
if (pos2, sp2) not in R:
R.add((pos2, sp2))
other.append((pos2, sp2))
queue = other
return -1
版权声明:转载注明 http://blog.csdn.net/birdreamer/article/details/79957952