Leetcode.2400 恰好移动 k 步到达某一位置的方法数目

题目链接

Leetcode.2400 恰好移动 k 步到达某一位置的方法数目 Rating : 1751

题目描述

给你两个 整数 startPosendPos。最初,你站在 无限 数轴上位置 startPos处。在一步移动中,你可以向左或者向右移动一个位置。

给你一个正整数 k,返回从 startPos出发、恰好 移动 k步并到达 endPos不同 方法数目。由于答案可能会很大,返回对 1 0 9 + 7 10^9 + 7 109+7 取余 的结果。

如果所执行移动的顺序不完全相同,则认为两种方法不同。

注意:数轴包含负整数。

示例 1:

输入:startPos = 1, endPos = 2, k = 3
输出:3
解释:存在 3 种从 1 到 2 且恰好移动 3 步的方法:

  • 1 -> 2 -> 3 -> 2.
  • 1 -> 2 -> 1 -> 2.
  • 1 -> 0 -> 1 -> 2. 可以证明不存在其他方法,所以返回 3 。
示例 2:

输入:startPos = 2, endPos = 5, k = 10
输出:0
解释:不存在从 2 到 5 且恰好移动 10 步的方法。

提示:
  • 1 < = s t a r t P o s , e n d P o s , k < = 1000 1 <= startPos, endPos, k <= 1000 1<=startPos,endPos,k<=1000

解法:组合数学

我们定义 startPos ----> endPos为正方向,endPos----> startPos为负方向。

我们假设往 正方向 走了 a步,那么往 负方向 就走了剩下的步数,即 k - a步。

如果成立,必须满足 a − ( k − a ) = d a - (k - a) = d a(ka)=d d = a b s ( s t a r t P o s − e n d P o s ) d = abs(startPos - endPos) d=abs(startPosendPos)

所以我们最后的答案为 C k a C_{k}^{a} Cka,即 C k k + d 2 C_{k}^{\frac{k+d}{2}} Ck2k+d。所以 k + d k + d k+d 必须是偶数才行,否则不符合要求。

对于组合数,我们利用递推式 C m n = C m − 1 n + C m − 1 n − 1 C_m^n = C_{m-1}^n + C_{m-1}^{n-1} Cmn=Cm1n+Cm1n1,求出 C k k C_k^k Ckk

最终返回 C k a C_k^a Cka即可。

时间复杂度: O ( k 2 ) O(k ^ 2) O(k2)

C++代码:

const int MOD = 1e9 + 7;
using LL = long long;

class Solution {
public:
    int numberOfWays(int startPos, int endPos, int k) {
        int d = abs(startPos - endPos);
        if(d > k || (k + d) % 2 == 1) return 0;

        LL c[k+1][k+1];
        memset(c,0,sizeof c);
        for(int i = 0;i <= k;i++){
            c[i][0] = 1;
            for(int j = 1;j <= i;j++) c[i][j] = (c[i-1][j] + c[i-1][j-1]) % MOD;
        }

        return c[k][(k + d) / 2];
    }    
};

### 回答1: 这个错误信息意味着你正在尝试运行一个叫做“leetcode.toggleleetcodecn”的命令,但是系统找不到这个命令。 这可能是因为你使用的软件或工具不支持这个命令,或者这个命令在你当前的上下文中不可用。你可以检查一下你的命令拼写是否正确,或者查看相关的文档和说明来了解如何正确地使用这个命令。 ### 回答2: 当我们在使用LeetCode插件时,可能会遇到错误提示“command 'leetcode.toggleleetcodecn' not found”。这个问题出现的原因是插件没有正确安装或者没有激活。下面是解决这个问题的几个骤: 1. 确认插件是否安装成功 首先,我们需要确认LeetCode插件是否已经成功安装。可以通过在VS Code的侧边栏中找到“Extensions”图标,然后在搜索框中输入“LeetCode”来查找插件是否存在。如果插件存在,那么就说明安装成功。 2. 确认插件是否已经激活 在安装插件之后,我们还需要激活LeetCode插件才能使用它提供的功能。可以在VS Code的侧边栏中找到“Extensions”图标,然后点击“Installed”选项卡,在LeetCode插件下方看到是否显示“Activate”按钮,如果是,则需要点击该按钮进行激活。 3. 检查配置项是否正确设置 在安装插件并激活之后,LeetCode插件的配置项需要正确设置才能顺利使用。可以在VS Code的右下角找到“Settings”按钮,然后搜索“LeetCode”来找到插件的配置项。在配置页面中可以看到“Language Switch”选项,此处需要确保开启了中文支持。 如果以上三个骤都已经确认完成,但还是遇到了“command 'leetcode.toggleleetcodecn' not found”这个错误,则可以尝试卸载并重新安装插件,或者尝试咨询LeetCode官方支持团队。 ### 回答3: 这个错误提示是因为在使用LeetCode的插件时,该插件没有被正确加载或安装。在使用该插件之前,需要确保已经按照LeetCode插件的安装骤正确地安装和配置了插件。 为了解决该问题,可以采取以下骤: 1. 检查是否已经安装了VS Code和LeetCode插件。如果没有安装,需要按照官方文档的指导进行安装。 2. 确认已经登录了LeetCode账号。在登录成功之后,需要在LeetCode插件的设置中填写正确的账号信息。 3. 检查是否在VS Code的用户设置中配置了相关的设置项。在VS Code的用户设置中,需要添加以下配置项: ```json "leetcode.endpoint": "https://leetcode-cn.com/graphql", "leetcode.defaultLanguage": "javascript", "leetcode.workspaceFolder": "${workspaceFolder}/leetcode", "leetcode.skeletonFileExtension": "js" ``` 4. 如果 LeetCode 插件的版本不是最新版本,则需要更新插件。在VS Code中,可以通过侧边栏中的扩展选项或者运行命令“Extensions: Check for Extension Updates”来升级插件。 5. 如果以上骤都无效,可以尝试重新安装LeetCode插件,并按照官方文档的指导进行配置和使用。 总之,要解决'leetcode.toggleleetcodecn' not found 错误,需要仔细检查和核对安装、配置、登录等这些骤,以确保LeetCode插件能够正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值