方法一
用一个 模拟的方法?
class Solution {
public:
bool canCross(vector<int>& stones) {
int n=stones.size();
map<int,set<int>> mp;
//初始化所有的好台阶
set<int> empty;
for(int i=1;i<n;i++){
mp[stones[i]]=empty;
}
mp[1].insert(1);
for(int i=1;i<n;i++){ //第二次写没写出来的点
int cur = stones[i]; //现在的位置
for(auto k:mp[cur]){ //遍历其对应的上一步位置
for(int nextStep=k-1;nextStep<=k+1;nextStep++){
if(nextStep>0 && mp.count(stones[i]+nextStep)){
mp[stones[i]+nextStep].insert(nextStep);
}
}
}
}
return !mp[stones[n-1]].empty();
}
};
方法二 动态规划
但是具体的一些边界值的处理没有太懂