Leetcode 403 Solution

This article provides solution to leetcode question 403 (frog-jump).

https://leetcode.com/problems/frog-jump

Solution

class Solution {
public:
    bool canCross(vector<int>& stones) {
        if (stones.size() == 1)
            return true;

        unordered_map<int, set<int>> a;
        
        for (auto stone : stones)
            a[stone] = set<int>();
        
        for (int i = 0; i < stones.size(); i++)
        {
            if (i == 0)
            {
                if (a.find(1) == a.end())
                    return false;
                
                a[1].insert(1);
                a[1].insert(2);
            }
            else
            {
                int stone = stones[i];
                
                if (a.find(stone) == a.end())
                    continue;
                
                auto steps = a[stone];
                
                for (auto step : steps)
                {
                    if (a.find(stone + step) != a.end())
                    {
                        a[stone + step].insert(step - 1);
                        a[stone + step].insert(step);
                        a[stone + step].insert(step + 1);
                    }
                }
            }
            
            if (a[stones.back()].size() != 0)
                return true;
        }
        
        return false;
    }
};