Number of Ways to Stay in the Same Place After Some Steps

HardDynamic Programming

Solution

export function numWays(steps: number, arrLen: number): number {
  if (steps < 2 || arrLen < 1) {
    return 1;
  }
 
  const MOD = 10 ** 9 + 7;
  const minLen = Math.min(arrLen, steps);
  const dp = new Array<number>(minLen + 1).fill(0);
  dp[0] = 1;
  for (let step = steps; 0 < step; step--) {
    let prevWays = 0;
    for (let i = 0; i < minLen; i++) {
      const currWays = dp[i];
      dp[i] = (prevWays + dp[i] + dp[i + 1]) % MOD;
      prevWays = currWays;
    }
  }
  return dp[0];
}