another-guy/problem-solving-ts

View on GitHub
src/cracking-the-coding-interview/8-recursion-and-dynamic-programming/8-1-triple-step.ts

Summary

Maintainability
A
1 hr
Test Coverage
export function tripleStep(stepsCount: number): number {
  if (stepsCount <= 0) throw new Error(`${stepsCount} of steps is not a real stair!`);
  else if (stepsCount === 1) return 1;
  else if (stepsCount === 2) return 2;
  else if (stepsCount === 3) return 4;
  else {
    let numberOfWaysTo3StepsBelow = tripleStep(1);
    let numberOfWaysTo2StepsBelow = tripleStep(2);
    let numberOfWaysTo1StepBelow = tripleStep(3);

    for (let currentStep = 4; currentStep < stepsCount; currentStep++) {
      const numberOfWaysToCurrent =
        numberOfWaysTo1StepBelow + numberOfWaysTo2StepsBelow + numberOfWaysTo3StepsBelow;
      
      numberOfWaysTo3StepsBelow = numberOfWaysTo2StepsBelow;
      numberOfWaysTo2StepsBelow = numberOfWaysTo1StepBelow;
      numberOfWaysTo1StepBelow = numberOfWaysToCurrent;
    }

    return numberOfWaysTo1StepBelow + numberOfWaysTo2StepsBelow + numberOfWaysTo3StepsBelow;
  }
}