3154. Find Number of Ways to Reach the K-th Stair
Description
You are given a non-negative integer k. There exists a staircase with an infinite number of stairs, with the lowest stair numbered 0.
Alice has an integer jump, with an initial value of 0. She starts on stair 1 and wants to reach stair k using any number of operations. If she is on stair i, in one operation she can:
- Go down to stair
i - 1. This operation cannot be used consecutively or on stair 0. - Go up to stair
i + 2jump. And then,jumpbecomesjump + 1.
Return the total number of ways Alice can reach stair k.
Note that it is possible that Alice reaches the stair k, and performs some operations to reach the stair k again.
Example 1:
Input: k = 0
Output: 2
Explanation:
The 2 possible ways of reaching stair 0 are:
- Alice starts at stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
- Alice starts at stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
- Using an operation of the second type, she goes up 20 stairs to reach stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
Example 2:
Input: k = 1
Output: 4
Explanation:
The 4 possible ways of reaching stair 1 are:
- Alice starts at stair 1. Alice is at stair 1.
- Alice starts at stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
- Using an operation of the second type, she goes up 20 stairs to reach stair 1.
- Alice starts at stair 1.
- Using an operation of the second type, she goes up 20 stairs to reach stair 2.
- Using an operation of the first type, she goes down 1 stair to reach stair 1.
- Alice starts at stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
- Using an operation of the second type, she goes up 20 stairs to reach stair 1.
- Using an operation of the first type, she goes down 1 stair to reach stair 0.
- Using an operation of the second type, she goes up 21 stairs to reach stair 2.
- Using an operation of the first type, she goes down 1 stair to reach stair 1.
Constraints:
0 <= k <= 109
Solutions
Solution: Dynamic Programming
- Time complexity: O(log2k)
- Space complexity: O(log2k)
JavaScript
js
/**
* @param {number} k
* @return {number}
*/
const waysToReachStair = function (k) {
const memo = new Map();
const getWaysToReachK = (stairs, jump, prevDown) => {
if (stairs - 1 > k || stairs < 0) return 0;
const key = `${stairs},${jump},${Number(prevDown)}`;
if (memo.has(key)) return memo.get(key);
let result = stairs === k ? 1 : 0;
if (!prevDown) {
result += getWaysToReachK(stairs - 1, jump, true);
}
const nextStairs = stairs + 2 ** jump;
result += getWaysToReachK(nextStairs, jump + 1, false);
memo.set(key, result);
return result;
};
return getWaysToReachK(1, 0, false);
};