有乙隻跳蚤的家在數軸上的位置 x 處。請你幫助它從位置 0 出發,到達它的家。
跳蚤跳躍的規則如下:
它可以 往前 跳恰好 a 個位置(即往右跳)。
它可以 往後 跳恰好 b 個位置(即往左跳)。
它不能 連續 往後跳 2 次。
它不能跳到任何 forbidden 陣列中的位置。
跳蚤可以往前跳 超過 它的家的位置,但是它 不能跳到負整數 的位置。
給你乙個整數陣列 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同時給你整數 a, b 和 x ,請你返回跳蚤到家的最少跳躍次數。如果沒有恰好到達 x 的可行方案,請你返回 -1 。
示例 1:
輸入:forbidden = [14,4,18,1,15], a = 3, b = 15, x = 9
輸出:3
解釋:往前跳 3 次(0 -> 3 -> 6 -> 9),跳蚤就到家了。
示例 2:
輸入:forbidden = [8,3,16,6,12,20], a = 15, b = 13, x = 11
輸出:-1
示例 3:
輸入:forbidden = [1,6,2,14,5,17,4], a = 16, b = 9, x = 7
輸出:2
解釋:往前跳一次(0 -> 16),然後往回跳一次(16 -> 7),跳蚤就到家了。
1 <= forbidden.length <= 1000
1 <= a, b, forbidden[i] <= 2000
0 <= x <= 2000
forbidden 中所有位置互不相同。
位置 x 不在 forbidden 中。
注意,這裡向後跳到達的點不需要標記為訪問過。因為乙個點可以向前跳到,也可以反向跳到。
class solution
};bool vis[4005];
int minimumjumps(vector& forbidden, int a, int b, int x)
for (auto x : forbidden)
int ans = 0;
queue q;
q.push(node(0,false));
vis[0] = true;
while (!q.empty())
else
if (tmp < 4000 && !vis[tmp])
tmp = now.idx - b;
if (tmp == x)
else
if (tmp >= 0 && !vis[tmp] && !now.flag) }}
return -1;
}};
1654 到家的最少跳躍次數
題目描述 有乙隻跳蚤的家在數軸上的位置 x 處。請你幫助它從位置 0 出發,到達它的家。跳蚤跳躍的規則如下 它可以 往前 跳恰好 a 個位置 即往右跳 它可以 往後 跳恰好 b 個位置 即往左跳 它不能 連續 往後跳 2 次。它不能跳到任何 forbidden 陣列中的位置。跳蚤可以往前跳 超過 它...
跳躍遊戲II(最少的可達跳躍次數)
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...
Leetcode 1654 到家的最少跳躍次數
題意 有乙隻跳蚤的家在數軸上的位置x處。請你幫助它從位置0出發,到達它的家。跳蚤跳躍的規則如下 跳蚤可以往前跳超過它的家的位置,但是它不能跳到負整數的位置。給你乙個整數陣列forbidden,其中forbidden i 是跳蚤不能跳到的位置,同時給你整數a,b和x,請你返回跳蚤到家的最少跳躍次數。如...