Leetcode 403 青蛙過河 C

2021-10-07 19:04:50 字數 1179 閱讀 5641

乙隻青蛙想要過河。 假定河流被等分為 x 個單元格,並且在每乙個單元格內都有可能放有一石子(也有可能沒有)。 青蛙可以跳上石頭,但是不可以跳入水中。

給定石子的位置列表(用單元格序號公升序表示), 請判定青蛙能否成功過河(即能否在最後一步跳至最後乙個石子上)。 開始時, 青蛙預設已站在第乙個石子上,並可以假定它第一步只能跳躍乙個單位(即只能從單元格1跳至單元格2)。

如果青蛙上一步跳躍了 k 個單位,那麼它接下來的跳躍距離只能選擇為 k - 1、k 或 k + 1個單位。 另請注意,青蛙只能向前方(終點的方向)跳躍。

注意:示例 1:

[0,1,3,5,6,8,12,17]

總共有8個石子。

第乙個石子處於序號為0的單元格的位置, 第二個石子處於序號為1的單元格的位置,

第三個石子在序號為3的單元格的位置, 以此定義整個陣列...

最後乙個石子處於序號為17的單元格的位置。

返回 true。即青蛙可以成功過河,按照如下方案跳躍:

跳1個單位到第2塊石子, 然後跳2個單位到第3塊石子, 接著

跳2個單位到第4塊石子, 然後跳3個單位到第6塊石子,

跳4個單位到第7塊石子, 最後,跳5個單位到第8個石子(即最後一塊石子)。

示例 2:
[0,1,2,3,4,8,9,11]

返回 false。青蛙沒有辦法過河。

這是因為第5和第6個石子之間的間距太大,沒有可選的方案供青蛙跳躍過去。

dfs深搜

首先,我們假設一共有n塊石頭,且石頭的間隔正好是上一次跳k步的k+1的位置上,也就是說,我們可以跳到1+2+3+4+···+n的位置上,即n*(n-1)/2,如果我們的目標大於這個數,顯然是無解的。

之後,我們就深搜即可,注意我們用乙個雜湊集合記錄石塊的位置,我們跳的時候是要跳到石頭上面,而且我們先盡可能的往遠跳。詳細過程見**

bool

dfs(unordered_set<

int>

& poss,

int cur,

int step,

int target)

return

false;}

bool

cancross

(vector<

int>

& stones)

403 青蛙過河

乙隻青蛙想要過河。假定河流被等分為 x 個單元格,並且在每乙個單元格內都有可能放有一石子 也有可能沒有 青蛙可以跳上石頭,但是不可以跳入水中。給定石子的位置列表 用單元格序號公升序表示 請判定青蛙能否成功過河 即能否在最後一步跳至最後乙個石子上 開始時,青蛙預設已站在第乙個石子上,並可以假定它第一步...

青蛙過河問題

青蛙過河是乙個非常有趣的智力遊戲,其大意如下 一條河之間有若干個石塊間隔,有兩隊青蛙在過河,每隊有3 只青蛙,如 圖 10 19所示。這些 青蛙只能向前移動,不能向後移動,且一次只能有乙隻青蛙向前移動。在移動過程中,育蛙可以向 前面的空位中移動,不可一次跳過兩個位置,但是可以跳過對方乙隻青蛙進入前面...

N 青蛙過河

description 1 一條小溪尺寸不大,青蛙可以從左岸跳到右岸,在左岸有一石柱l,石柱l面積只容得下乙隻青蛙落腳,同樣右岸也有一石柱r,石柱r面積也只容得下乙隻青蛙落腳。2 有一隊青蛙從小到大編號 1,2,n。3 初始時 青蛙只能趴在左岸的石頭 l 上,按編號乙個落乙個,小的落在大的上面 不允...