Divide & Conquer
function specialGrid(n: number): number[][] {
  const size = 1 << n;
  const grid: number[][] = Array.from({ length: size }, () =>
    new Array(size).fill(0)
  );
  let val = 0;
  function solve(r: number, c: number, size: number): void {
    if (size === 1) {
      grid[r][c] = val++;
      return;
    }
    const s = size / 2;
    solve(r, c + s, s); // top right
    solve(r + s, c + s, s); // bottom right
    solve(r + s, c, s); // bottom left
    solve(r, c, s); // top left
  }
  solve(0, 0, size);
  return grid;
}
Last updated
Was this helpful?