LintCode 1835. 停在原地的方案数1 JavaScript算法

描述

有一个长度为 arrLenarrLen 的数组,开始有一个指针在索引 00 处。

每一步操作中,你可以将指针向左或向右移动 11 步,或者停在原地(指针不能被移动到数组范围外)。

给你两个整数 stepssteps 和 arrLenarrLen ,请你计算并返回:在恰好执行 stepssteps 次操作以后,指针仍然指向索引 00 处的方案数。

由于答案可能会很大,请返回方案数 模 10^9 + 710​9​​+7 后的结果。

说明

  • 1 \leq steps \leq 151≤steps≤15
  • 1 \leq arrLen \leq 10^61≤arrLen≤10​6​

样例

- 样例 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);
}

运行结果

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SmallTeddy/article/details/108461822