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
.
为了减少memory使用量,只记录speed为1的
class Solution: def racecar(self, target): """ :type target: int :rtype: int """ res = 0 q,qq=[(1,0)],[] vs = set() vs.add((1,0)) while q: while q: ts,tp=q.pop() if tp==target: return res if (2*ts,tp+ts) not in vs: qq.append((2*ts,tp+ts)) # vs.add((2*ts,tp+ts)) # only start point need to be memoried qq.append((-1 if ts>0 else 1,tp)) vs.add((-1 if ts>0 else 1,tp)) q,qq=qq,q res+=1 s=Solution() #print(s.racecar(3)) #print(s.racecar(6)) #print(s.racecar(5)) print(s.racecar(6102))