Given an array of non-negative integers `arr`, you are initially positioned at `start` index of the array. When you are at index `i`, you can jump to `i + arr[i]` or `i - arr[i]`, checking that the new index is within the bounds of the array. Notice that you can not jump outside of the array at any time. Return `true` if you can reach **any** index with value `0`, otherwise return `false`.
Example 1
Input: arr = [4,2,3,0,3,1,2], start = 5
Output: true
Explanation: 5→4→1→3 reaches index 3 whose value is 0.
Example 2
Input: arr = [4,2,3,0,3,1,2], start = 0
Output: true
Explanation: 0→4→1→3 also reaches the 0 at index 3.
Example 3
Input: arr = [3,0,2,1,2], start = 2
Output: false
Explanation: From index 2 (value 2) you can reach 0 or 4. From 0 (value 3) you can reach 3, and from 3 or 4 every jump leads back into {0, 2, 3, 4}. Index 1, the only 0, is never reached.
Treat indices as graph nodes: from i there are edges to i+arr[i] and i-arr[i]. BFS (or DFS) from start, marking visited so we never loop, and succeed the moment we land on an index holding 0.
Run checks all cases above. Submit evaluates all test cases.