Leetcode 3352. Count K-Reducible Numbers Less Than N

  • Leetcode 3352. Count K-Reducible Numbers Less Than N
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3352. Count K-Reducible Numbers Less Than N

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+7factorials = [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]) % MODclass Solution:def countKReducibleNumbers(self, s: str, k: int) -> int:if s == "1":return 0def minus_one(s):n = len(s)idx = n-1while s[idx] == "0":idx -= 1s = 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 0if ones == 0:return 1if idx >= n:return 0if allow_large:return (count(idx+1, ones-1, allow_large) + count(idx+1, ones, allow_large)) % MODelif s[idx] == "1":return (count(idx+1, ones-1, allow_large) + count(idx+1, ones, True)) % MODelse:return count(idx+1, ones, allow_large)ans = 0for digit_num in digit_nums.values():for digit in digit_num:ans = (ans + count(0, digit, False)) % MODreturn ans

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理&#x…

232转485模块测试

概述 常用的PLC一般会有两个左右的232口,以及两个左右的485口,CAN口等,但是PLC一般控制的设备可能会有很多,会超出通讯口的数量,此时我们一般会采用一个口接多个设备,这种情况下要注意干扰等因素&#xff0…

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟(CSA)宣布推出最新的 Matter 1.4 版本,引入了一系列新的设备类型和功能增强,有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

SpringBoot实现文件上传并返回url链接

检查依赖 确保pom.xml包含了Spring Boot Web的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>创建Controller 创建公用上传文件控制器 package…

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

苍穹外卖05-Redis相关知识点

目录 什么是Redis&#xff1f; redis中的一些常用指令 value的5种常用数据类型 各种数据类型的特点 Redis中数据操作的常用命令 字符串类型常用命令&#xff1a; 哈希类型常用命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在java中操作Redis 环境…

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得,如下图所示: 这个AES加密是通用的加密方式,使用同一套算法,前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作,将加密之后的字符串再传递到后端,PHP再进行解密操作。…

【Windows erver】配置高性能电源管理

操作场景 在 Windows Server 操作系统上&#xff0c;需要配置高性能电源管理&#xff0c;才能支持实例软关机&#xff0c;否则云服务器控制台只能通过硬关机的方式关闭实例。本文档以 Windows Server 2012 操作系统为例&#xff0c;介绍配置电源管理的方法。 操作说明 修改电…

【JAVA基础】MAVEN的安装及idea的引用说明

本篇文章主要讲解&#xff0c;maven的安装及集成在idea中进行构建项目的详细操作教程。 日期&#xff1a;2024年11月11日 作者&#xff1a;任聪聪 所需材料&#xff1a; 1、idea 2024版本及以上 2、maven 3.9.9安装包 3、一个空java springBoot项目&#xff0c;可以使用阿里云…

AI变现,做数字游民

在数字化时代&#xff0c;AI技术的迅猛发展不仅改变了各行各业的生产方式&#xff0c;还为普通人提供了前所未有的变现机会。本文将探讨如何利用AI技术实现变现&#xff0c;成为一名数字游民&#xff0c;享受自由职业带来的便利与乐趣。 一、AI技术的变现潜力 AI技术以其强大…

解非线性方程

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的&#xff1a;进一步熟练掌握解非线性方程的二分法算法、牛顿迭代法&#xff0c;提高编程能力和解算非线性方程问题的实践技能。 实验内容&#xff1a;用二分法算法(取[a,b][1,2])、牛顿迭代法解算非线性…

详细分析Guava库中的注解@VisibleForTesting,用于标记提醒私有(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 从实战中学习&#xff1a; 源码如下&…

Hadoop(YARN)

文章目录 YARN基础架构YARN工作原理YARN调度器和调度算法先进先出调度器容量调度器公平调度器 YARN常用命令 YARN基础架构 YARN是Hadoop集群的资源管理和调度系统&#xff0c;它负责为各种分布式计算任务分配和管理资源,包含以下组件&#xff1a;ResourceManager&#xff0c;N…

【GoWeb示例】通过示例学习 Go 的 Web 编程

文章目录 你好世界HTTP 服务器路由&#xff08;使用 gorilla/mux&#xff09;连接到 MySQL 数据库MySQL 数据库简单操作模板静态资源和文件操作表单处理中间件&#xff08;基础&#xff09;中间件&#xff08;高级&#xff09;会话JSONWebsockets密码哈希 你好世界 Go语言创建…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union&#xff0c;“联合体、共用体”&#xff0c;在某种程度上类似结构体struct的一种数据结构&#xff0c;共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工欲善…

大数据学习12之HBase

1.基本概念 1.1简介 Apache HBase&#xff08;Hadoop DataBase&#xff09;是一个开源的、高可靠性、高性能、面向列&#xff08;这里指列族&#xff0c;非列式存储&#xff09;、可伸缩、实时读写的分布式数据库&#xff0c;其设计思想来源于 Google 的 BigTable 论文。利用 …

(Go基础)Go的运行流程步骤与包的概念

1. 快速入门 所有的go开发&#xff0c;都必须存在并包含在某一个包内 .go 是go语言程序的后缀名 1.1 编译 通过使用 go build 命令对该go文件进行编译&#xff0c;生成.exe文件 1.2 运行 运行刚刚生成出来的test.exe文件既可&#xff0c;不过并不不是双击&#xff0c;而是在…

CSS教程(八)- 盒子模型

1、介绍 核心内容 盒子模型、浮动和定位&#xff0c;帮助我们实现页面布局 本质&#xff1a;页面布局过程 准备好相关的页面元素&#xff0c;网页元素基本都是盒子 Box 利用 CSS 设置盒子的样式&#xff0c;摆放到相应的位置 向盒子中填充相应内容 网页布局的核心本质&…

数据结构——二叉树和BST

树与二叉树 基本概念 树是一种非线性结构&#xff0c;其严格的数学定义是&#xff1a;如果一组数据中除了第一个节点&#xff08;第一个节点称为根节点&#xff0c;没有直接前驱节点&#xff09;之外&#xff0c;其余任意节点有且仅有一个直接前驱&#xff0c;有零个或多个直接…