leetcode 818. Race Car

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值