首页 > 其他分享 >Leetcode 3352. Count K-Reducible Numbers Less Than N

Leetcode 3352. Count K-Reducible Numbers Less Than N

时间:2024-11-17 21:14:07浏览次数:3  
标签:Count digit return idx Less large ones Than MOD

1. 解题思路

这一题的话思路上我是拆成了两步来做的,首先,我们要认识到,这里的变化本质就是看数的二进制表达当中有多少个1,因此,假设给定数字的二进制表示长度为 n n n,我们就是要遍历 1 1 1到 n n n当中有多少数能够在至多 k k k次变换之后变为 1 1 1,显然 k = 1 k=1 k=1时,答案就只有 1 1 1,也就是数字只能包含一个二级位为 1 1 1,然后,对于其他的数,我们只需要用一个迭代遍历即可快速获取,整体的复杂度就是 O ( k n ) O(kn) O(kn)。

然后,剩下的问题就变成了,一直一个数二进制数包含 m m m个 1 1 1,请问一共有多少个不大于给定值 s s s的数,此时我们用一个动态规划即可完成。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7

factorials = [1 for _ in range(801)]
for i in range(2, 801):
    factorials[i] = (i * factorials[i-1]) % MOD
revs = [pow(i, -1, mod=MOD) for i in factorials]

@lru_cache(None)
def C(n, m):
    return (factorials[n] * revs[m] * revs[n-m]) % MOD

class Solution:
    def countKReducibleNumbers(self, s: str, k: int) -> int:
        if s == "1":
            return 0
        
        def minus_one(s):
            n = len(s)
            idx = n-1
            while s[idx] == "0":
                idx -= 1
            s = s[:idx] + "0" + "1" * (n-idx-1)
            return s.lstrip("0")
        
        s = minus_one(s)
        n = len(s)
        
        digit_nums = defaultdict(set)
        digit_nums[1] = {1}
        for i in range(2, k+1):
            for j in range(2, n+1):
                if Counter(bin(j))["1"] in digit_nums[i-1]:
                    digit_nums[i].add(j)

        @lru_cache(None)
        def count(idx, ones, allow_large):
            if allow_large:
                return C(n-idx, ones) if n-idx >= ones else 0
            if ones == 0:
                return 1
            if idx >= n:
                return 0
            if allow_large:
                return (count(idx+1, ones-1, allow_large) + count(idx+1, ones, allow_large)) % MOD
            elif s[idx] == "1":
                return (count(idx+1, ones-1, allow_large) + count(idx+1, ones, True)) % MOD
            else:
                return count(idx+1, ones, allow_large)
            
        ans = 0
        for digit_num in digit_nums.values():
            for digit in digit_num:
                ans = (ans + count(0, digit, False)) % MOD
        return ans

提交代码评测得到:耗时1513ms,占用内存438.4MB。

标签:Count,digit,return,idx,Less,large,ones,Than,MOD
From: https://blog.csdn.net/codename_cys/article/details/143669677

相关文章

  • WPF ItemsControl.AlternationIndex AlternationCount
    <StyleTargetType="{x:TypeControl}"x:Key="lbxStyle"><Style.Triggers><TriggerProperty="ItemsControl.AlternationIndex"Value="0"><SetterProperty="Background&quo......
  • SQLI LABS | Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE
    关注这个靶场的其它相关笔记:SQLILABS——靶场笔记合集-CSDN博客0x01:过关流程输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-49/本关考察的其实是ORDERBY后的注入(虽然它被归结到了堆叠注入中,但其实它并不是)。......
  • C# The file is too long. This operation is currently limited to supporting file
    namespaceConsoleApp4{internalclassProgram{staticvoidMain(string[]args){stringbigFile=@"C:\Users\fred\Downloads\ebook-master.zip";ReadBigFile(bigFile);}......
  • bloompy库的CountingBloomFilter使用说明及示例
    1、使用说明: HelponclassCountingBloomFilterinmodulebloompy:classCountingBloomFilter(BloomFilter) | CountingBloomFilter(error_rate=0.001,element_num=10000,bit_num=None) |  | Methodresolutionorder: |   CountingBloomFilter ......
  • 零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount
    今天我们来聊一聊大数据,作为一个Hadoop的新手,我也并不敢深入探讨复杂的底层原理。因此,这篇文章的重点更多是从实际操作和入门实践的角度出发,带领大家一起了解大数据应用的基本过程。我们将通过一个经典的案例——WordCounter,来帮助大家入门。简单来说,这个案例的目标是从一个文本文......
  • 从零到一构建并打包 React + TypeScript + Less组件库教程(四、Icon 图标组件库自动生
    了解流行组件库的Icon组件本系列目录如下:项目初始化搭建+代码规范集成组件库多产物编译及文档编写turborepo集成Icon图标组件库自动生成svg组件点击查看此次commit本篇文章技术来源于semidesign,参考了semidesign的icon组件库设计观察我们经常使用的组件......
  • [ABC221H] Count Multiset
    给定\(n,m\)。对于每个\(k=1,2,\dots,n\),求解有多少大小为\(k\)的正整数可重集的元素和为\(k\),且每个元素的出现次数都\(\lem\)。\(m\len\le5000\)。可重集转化成单调不降的序列\(a\)。在通过差分转化成任意非负整数序列\(b\)(需要保证\(b_1>0\))。可重集中......
  • 从零到一构建并打包 React + TypeScript + Less组件库教程(二、组件库编译多产物及文档
    本系列目录如下:项目初始化搭建+代码规范集成组件库多产物编译及文档编写上篇文章我们将组件库的基本结构和规范进行了整理,本篇的核心基本全在components文件夹下本篇的打包参考了文章https://github.com/worldzhao/blog/issues/5,强烈建议阅读一下此文章,而且讨论区也能......
  • 从零到一构建并打包 React + TypeScript + Less组件库教程(一、项目初始化搭建+代码规
    本系列涉及的内容如下:组件库基础搭建,react+ts+less项目规范,包括但不限于prettier、eslint、stylelint、husky、lint-staged、commitlintpnpmmonorepo+turborepo集成gulp+webpack构建esm、cjs和umdstorybook文档集成此系列不包含发布npm和构建CI流程。......
  • Serverless GPU:助力 AI 推理加速
    本文整理自2024云栖大会,阿里云智能集团高级技术专家聂大鹏、NVIDIA解决方案架构师金国强演讲议题《ServerlessGPU:助力AI推理加速》近年来,AI技术发展迅猛,企业纷纷寻求将AI能力转化为商业价值,然而,在部署AI模型推理服务时,却遭遇成本高昂、弹性不足及运维复杂等挑战。本文......