Untitled

 avatar
unknown
plain_text
a month ago
1.4 kB
5
Indexable
class Solution {
    private Boolean[] reachableResult;

    private int maxVisited = 0;

    private boolean isGivenElementZero(int i, String s) {
        return s.charAt(i) == '0';
    }

    private boolean reachableIterations(int currPos, String s, int minJump, int maxJump) {
        if (currPos == s.length()-1) {
            return isGivenElementZero(currPos, s) ? true : false;
        }

        if (reachableResult[currPos] != null) {
            return reachableResult[currPos];
        }

        int startPos = Math.max(currPos + minJump, maxVisited + 1);
        int lastPossiblePos = Math.min((currPos + maxJump), s.length()-1);
        for (int i = startPos; i <= lastPossiblePos; i++) {        
            maxVisited = Math.max(maxVisited, i);

            if (!isGivenElementZero(i, s)) continue;

            boolean canReachFromHere = reachableIterations(i, s, minJump, maxJump);
            
            if (canReachFromHere) {
                return reachableResult[currPos] = true;
            };
        }
        return reachableResult[currPos] = false;
    }

    public boolean canReach(String s, int minJump, int maxJump) {
        reachableResult = new Boolean[s.length()];
        return isGivenElementZero((s.length()-1), s) ? 
            reachableIterations(0, s, minJump, maxJump) : false;
    }
}
Editor is loading...
Leave a Comment