Dynamic programming - Bottom up
\n\nfunc canReach(s string, minJump int, maxJump int) bool {\n    if len(s) < 2 { return true }\n    if s[len(s) - 1] == \'1\' { return false }\n    \n    dp :=
```\n\nfunc canReach(s string, minJump int, maxJump int) bool {\n    if len(s) < 2 { return true }\n    if s[len(s) - 1] == \'1\' { return false }\n    \n    dp := make([]bool, len(s))\n    dp[len(s) - 1] = true\n    \n    for i := len(s) - 2; i >= 0; i-- {\n        \n        if s[i] == \'1\' {\n            continue\n        }\n        \n        for step := minJump; step <= maxJump; step++ {\n            if step + i < len(s) && dp[step + i] == true { \n                dp[i] = true \n                break\n            }\n        }\n    }\n\n    return dp[0] == true\n}\n\n```
['Dynamic Programming', 'C', 'Java', 'Go', 'Python3']