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;
    }
};