描述
有一个长度为 arrLenarrLen 的数组,开始有一个指针在索引 00 处。
每一步操作中,你可以将指针向左或向右移动 11 步,或者停在原地(指针不能被移动到数组范围外)。
给你两个整数 stepssteps 和 arrLenarrLen ,请你计算并返回:在恰好执行 stepssteps 次操作以后,指针仍然指向索引 00 处的方案数。
由于答案可能会很大,请返回方案数 模 10^9 + 7109+7 后的结果。
说明
- 1 \leq steps \leq 151≤steps≤15
- 1 \leq arrLen \leq 10^61≤arrLen≤106
样例
- 样例 1:
输入:
3
2
输出:4
说明:3 步后,总共有 4 种不同的方法可以停在索引 0 处。
向右,向左,不动
不动,向右,向左
向右,不动,向左
不动,不动,不动
- 样例 2:
输入:
2
4
输出:2
说明:2 步后,总共有 2 种不同的方法可以停在索引 0 处。
向右,向左
不动,不动
- 样例 3:
输入:
4
2
输出:8
解析
numWays = function (steps, arrLen) {
function dfs(left, cur, arrLen){
if (cur >= arrLen || cur < 0) return 0;
if (left === 0){
if (cur === 0) return 1;
return 0;
}
if (cur > left) return 0;
return (dfs(left - 1, cur, arrLen) + dfs(left - 1, cur - 1, arrLen) + dfs(left - 1, cur + 1, arrLen));
}
return dfs(steps, 0, arrLen);
}
运行结果