首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >leetcode第三题_九八K

leetcode第三题_九八K

作者头像
全栈程序员站长
发布2022-09-22 11:37:36
发布2022-09-22 11:37:36
2540
举报

大家好,又见面了,我是你们的朋友全栈君。

有 n 根长度互不相同的木棍,长度为从 1 到 n 的整数。请你将这些木棍排成一排,并满足从左侧 可以看到 恰好 k 根木棍。从左侧 可以看到 木棍的前提是这个木棍的 左侧 不存在比它 更长的 木棍。

例如,如果木棍排列为 [1,3,2,5,4] ,那么从左侧可以看到的就是长度分别为 1、3 、5 的木棍。 给你 n 和 k ,返回符合题目要求的排列 数目 。由于答案可能很大,请返回对 109 + 7 取余 的结果。

代码语言:javascript
复制
示例 1:

输入:n = 3, k = 2
输出:3
解释:[1,3,2], [2,3,1] 和 [2,1,3] 是仅有的能满足恰好 2 根木棍可以看到的排列。
可以看到的木棍已经用粗体+斜体标识。
示例 2:

输入:n = 5, k = 5
输出:1
解释:[1,2,3,4,5] 是唯一一种能满足全部 5 根木棍可以看到的排列。
可以看到的木棍已经用粗体+斜体标识。
示例 3:

输入:n = 20, k = 11
输出:647427950
解释:总共有 647427950 (mod 109 + 7) 种能满足恰好有 11 根木棍可以看到的排列。
 

提示:

1 <= n <= 1000
1 <= k <= n
代码语言:javascript
复制
typedef long long ll;
const int N = 1010,MOD = 1e9 + 7;
int f[N][N];
class Solution { 
   
public:

    int rearrangeSticks(int n, int k) { 
   
        f[0][0] = 1;
        for(int i = 1;i <= n;i ++){ 
   
            for(int j = 1;j <= k;j ++){ 
   
                f[i][j] = (f[i - 1][j - 1] + ((ll)(i - 1) * f[i - 1][j] % MOD)) % MOD;
            }
        }
        return f[n][k];
    }
};

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168560.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档