zoukankan      html  css  js  c++  java
  • [Swift]LeetCode920. 播放列表的数量 | Number of Music Playlists

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9750997.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Your music player contains N different songs and she wants to listen to L (not necessarily different) songs during your trip.  You create a playlist so that:

    • Every song is played at least once
    • A song can only be played again only if K other songs have been played

    Return the number of possible playlists.  As the answer can be very large, return it modulo 10^9 + 7.

     Example 1:

    Input: N = 3, L = 3, K = 1
    Output: 6
    Explanation: There are 6 possible playlists. [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1].
    

    Example 2:

    Input: N = 2, L = 3, K = 0
    Output: 6
    Explanation: There are 6 possible playlists. [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2, 1], [2, 1, 2], [1, 2, 2]
    

    Example 3:

    Input: N = 2, L = 3, K = 1
    Output: 2
    Explanation: There are 2 possible playlists. [1, 2, 1], [2, 1, 2]
    

     Note:

    1. 0 <= K < N <= L <= 100

    你的音乐播放器里有 N 首不同的歌,在旅途中,你的旅伴想要听 L 首歌(不一定不同,即,允许歌曲重复)。请你为她按如下规则创建一个播放列表:

    • 每首歌至少播放一次。
    • 一首歌只有在其他 K 首歌播放完之后才能再次播放。

    返回可以满足要求的播放列表的数量。由于答案可能非常大,请返回它模 10^9 + 7 的结果。

     示例 1:

    输入:N = 3, L = 3, K = 1
    输出:6
    解释:有 6 种可能的播放列表。[1, 2, 3],[1, 3, 2],[2, 1, 3],[2, 3, 1],[3, 1, 2],[3, 2, 1].
    

    示例 2:

    输入:N = 2, L = 3, K = 0
    输出:6
    解释:有 6 种可能的播放列表。[1, 1, 2],[1, 2, 1],[2, 1, 1],[2, 2, 1],[2, 1, 2],[1, 2, 2]
    

    示例 3:

    输入:N = 2, L = 3, K = 1
    输出:2
    解释:有 2 种可能的播放列表。[1, 2, 1],[2, 1, 2]
    

     提示:

    1. 0 <= K < N <= L <= 100

    56 ms

     1 class Solution {
     2     func numMusicPlaylists(_ N: Int, _ L: Int, _ K: Int) -> Int {
     3         var mod:Int = 1000000007
     4         var dp = Array(repeating:0, count: N+1)
     5         dp[0] = 1
     6         for i in 0..<L
     7         {
     8             var ndp = Array(repeating:0, count: N+1)
     9             for j in 0..<N
    10             {
    11                 ndp[j + 1] += dp[j] * (N-j)
    12                 ndp[j + 1] %= mod
    13             }
    14             for j in 0...N
    15             {
    16                 ndp[j] += dp[j] * max(j - K, 0)
    17                 ndp[j] %= mod
    18             }
    19             dp = ndp
    20         }
    21         return Int(dp[N])
    22     }
    23 }
     
  • 相关阅读:
    【jQuery插件】使用cropper实现简单的头像裁剪并上传
    Hibernate与 MyBatis的比较
    ES引擎原理介绍
    ES中的分词器研究
    服务转发Feign
    hytrix的python实现
    Consul的服务注册与发现-python版本
    setupTools工具新建项目
    docker系统学习
    NLP关键技术
  • 原文地址:https://www.cnblogs.com/strengthen/p/9750997.html
Copyright © 2011-2022 走看看