题目描述：

LeetCode 656. Coin Path

Given an array `A` (index starts at `1`) consisting of N integers: A1, A2, ..., AN and an integer `B`. The integer `B` denotes that from any place (suppose the index is `i`) in the array `A`, you can jump to any one of the place in the array `A` indexed `i+1`, `i+2`, …, `i+B` if this place can be jumped to. Also, if you step on the index `i`, you have to pay Ai coins. If Ai is -1, it means you can’t jump to the place indexed `i` in the array.

Now, you start from the place indexed `1` in the array `A`, and your aim is to reach the place indexed `N` using the minimum coins. You need to return the path of indexes (starting from 1 to N) in the array you should take to get to the place indexed `N` using minimum coins.

If there are multiple paths with the same cost, return the lexicographically smallest such path.

If it's not possible to reach the place indexed N then you need to return an empty array.

Example 1:

```Input: [1,2,4,-1,2], 2
Output: [1,3,5]
```

Example 2:

```Input: [1,2,4,-1,2], 1
Output: []
```

Note:

1. Path Pa1, Pa2, ..., Pan is lexicographically smaller than Pb1, Pb2, ..., Pbm, if and only if at the first `i` where Pai and Pbi differ, Pai < Pbi; when no such `i` exists, then `n` < `m`.
2. A1 >= 0. A2, ..., AN (if exist) will in the range of [-1, 100].
3. Length of A is in the range of [1, 1000].
4. B is in the range of [1, 100].

解题思路：

```若cost[i] > cost[j] + A[i] 或者 cost[i] == cost[j] + A[i] && path[i] > path[j] + [i]

Python代码：

``````class Solution(object):
def cheapestJump(self, A, B):
"""
:type A: List[int]
:type B: int
:rtype: List[int]
"""
N = len(A)
cost = [0x7FFFFFFF] * (N + 1)
cost[1] = A[0]
path = [[] for x in range(N + 1)]
path[1] = [1]
for x in range(2, N + 1):
if A[x - 1] == -1: continue
for y in range(1, B + 1):
z = x - y
if z < 1: break
if A[z - 1] == -1: continue
if cost[x] > cost[z] + A[x - 1] or \
cost[x] == cost[z] + A[x - 1] and path[x] > path[z] + [x]:
cost[x] = cost[z] + A[x - 1]
path[x] = path[z] + [x]
return path[-1]
``````

Pingbacks已关闭。