Where Will the Ball Fall

medium simulation matrix

Problem

An m×n grid of 1 (↘) and −1 (↙) diagonals diverts balls dropped from each top column. Return for each column the bottom column it exits through, or −1 if wedged.

Inputgrid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]]
Output[1,-1,-1,-1,-1]
Only column 0 makes it through.

def find_ball(grid):
    m, n = len(grid), len(grid[0])
    out = []
    for start in range(n):
        col = start
        for r in range(m):
            nxt = col + grid[r][col]
            if nxt < 0 or nxt >= n or grid[r][nxt] != grid[r][col]:
                col = -1; break
            col = nxt
        out.append(col)
    return out
function findBall(grid) {
  const m = grid.length, n = grid[0].length, out = [];
  for (let start = 0; start < n; start++) {
    let col = start;
    for (let r = 0; r < m; r++) {
      const nxt = col + grid[r][col];
      if (nxt < 0 || nxt >= n || grid[r][nxt] !== grid[r][col]) { col = -1; break; }
      col = nxt;
    }
    out.push(col);
  }
  return out;
}
class Solution {
    public int[] findBall(int[][] grid) {
        int m = grid.length, n = grid[0].length;
        int[] out = new int[n];
        for (int start = 0; start < n; start++) {
            int col = start;
            for (int r = 0; r < m; r++) {
                int nxt = col + grid[r][col];
                if (nxt < 0 || nxt >= n || grid[r][nxt] != grid[r][col]) { col = -1; break; }
                col = nxt;
            }
            out[start] = col;
        }
        return out;
    }
}
vector<int> findBall(vector<vector<int>>& grid) {
    int m = grid.size(), n = grid[0].size();
    vector<int> out(n);
    for (int start = 0; start < n; start++) {
        int col = start;
        for (int r = 0; r < m; r++) {
            int nxt = col + grid[r][col];
            if (nxt < 0 || nxt >= n || grid[r][nxt] != grid[r][col]) { col = -1; break; }
            col = nxt;
        }
        out[start] = col;
    }
    return out;
}
Time: O(m·n) Space: O(n)