2024.1.16每日一题

LeetCode

2719.统计整数数目

2719. 统计整数数目 - 力扣(LeetCode)

题目描述

给你两个数字字符串 num1num2 ,以及两个整数 max_summin_sum 。如果一个整数 x 满足以下条件,我们称它是一个好整数:

  • num1 <= x <= num2
  • min_sum <= digit_sum(x) <= max_sum.

请你返回好整数的数目。答案可能很大,请返回答案对 109 + 7 取余后的结果。

注意,digit_sum(x) 表示 x 各位数字之和。

示例 1:

输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8
输出:11
解释:总共有 11 个整数的数位和在 1 到 8 之间,分别是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。

示例 2:

输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5
输出:5
解释:数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5 。所以我们返回 5 。

提示:

  • 1 <= num1 <= num2 <= 1022
  • 1 <= min_sum <= max_sum <= 400

思路

无思路、cv大法

看题解的思路是数位DP

代码

C++
static constexpr long long mod = 1e9 + 7;
using LL = long long;
class Solution {
   public:
    int Min_sum, Max_sum;
    LL calc(string s) {
        LL m = s.size();
        vector memo(25, vector<LL>(450, -1));
        function<LL(LL, LL, bool, bool)> dfs = [&](LL i, LL cnt, bool is_limit, bool is_num) -> LL {
            if (i == m) return cnt >= Min_sum and cnt <= Max_sum;
            if (!is_limit and is_num and memo[i][cnt] != -1) return memo[i][cnt];
            LL res = 0;
            if (!is_num) {
                res += dfs(i + 1, cnt, false, false);
                res %= mod;
            }
            int up = is_limit ? s[i] - '0' : 9;
            int low = is_num ? 0 : 1;
            for (int d = low; d <= up; ++d) {
                res += dfs(i + 1, cnt + d, is_limit and d == up, true);
                res %= mod;
            }
            if (!is_limit and is_num) memo[i][cnt] = res;
            return res;
        };
        return dfs(0, 0, true, false);
    }
    bool check(string s) {
        int cnt = 0;
        for (char c : s) cnt += c - '0';
        return cnt >= Min_sum and cnt <= Max_sum;
    }
    int count(string num1, string num2, int min_sum, int max_sum) {
        Max_sum = max_sum;
        Min_sum = min_sum;
        LL ans = calc(num2) - calc(num1) + check(num1);
        return (ans % mod + mod) % mod;
    }
};
Java
class Solution {
static final long mod = 1000000007;
    int Min_sum, Max_sum;

    public long calc(String s) {
        int m = s.length();
        long[][] memo = new long[25][450];
        for (int i = 0; i < 25; i++) {
            Arrays.fill(memo[i], -1);
        }

        return dfs(0, 0, true, false, s, m, memo);
    }

    private long dfs(int i, int cnt, boolean is_limit, boolean is_num, String s, int m, long[][] memo) {
        if (i == m) return cnt >= Min_sum && cnt <= Max_sum ? 1 : 0;
        if (!is_limit && is_num && memo[i][cnt] != -1) return memo[i][cnt];
        long res = 0;

        if (!is_num) {
            res += dfs(i + 1, cnt, false, false, s, m, memo);
            res %= mod;
        }

        int up = is_limit ? s.charAt(i) - '0' : 9;
        int low = is_num ? 0 : 1;

        for (int d = low; d <= up; ++d) {
            res += dfs(i + 1, cnt + d, is_limit && d == up, true, s, m, memo);
            res %= mod;
        }

        if (!is_limit && is_num) memo[i][cnt] = res;
        return res;
    }

    public boolean check(String s) {
        int cnt = 0;
        for (char c : s.toCharArray()) cnt += c - '0';
        return cnt >= Min_sum && cnt <= Max_sum;
    }

    public int count(String num1, String num2, int min_sum, int max_sum) {
        Max_sum = max_sum;
        Min_sum = min_sum;
        long ans = calc(num2) - calc(num1) + (check(num1) ? 1 : 0);
        return (int) ((ans % mod + mod) % mod);
    }
}

image-20240116083138872

image-20240116083150305

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT 原生布局和QML的区别

一、QML 与 Qt Quick的区别 1.1 从概念上区分 为了更精确地对两者进行说明&#xff0c;先看助手对 QML 的描述&#xff1a; QML is a user interface specification and programming language. QML 是一种用户界面规范和标记语言&#xff0c;允许开发人员和设计师创建高性能、流…

招生官怒批ChatGPT文书质量“缺少灵魂”

ChatGPT无疑是最近两年留学届的热门话题&#xff0c;也成为了不少留学生再也离不开的万能工具&#xff0c;从总结文献、润色论文、给教授写email似乎无所不能。甚至还有不少同学在考虑直接提交ChatGPT生成的文书。 那么ChatGPT生成的文书质量高吗&#xff1f;各大高校对于学生…

【NI国产替代】PXI-6254,32 AI(16位,1 MS/s),48 DIO,PXI多功能I/O模块

32 AI&#xff08;16位&#xff0c;1 MS/s&#xff09;&#xff0c;48 DIO&#xff0c;PXI多功能I/O模块 PXI-6254提供模拟输入、关联数字I/O、两个32位计数器/定时器以及模拟和数字触发。该设备为从实验室自动化、研究、设计验证/测试到制造测试等各种应用提供了低成本的可靠D…

基于ssm的疫苗预约系统论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疫苗预约系统软件来发挥其高效地信息处理的作用&#xff0c…

Vue-API

$parent 和 $children $parent 父传子--在子组件中使用&#xff0c;放在计算属性、生命周期中&#xff1a; $children 子传父--方法中使用&#xff1a; $nextTick: $ref: 操作dom $set、$delete:

Docker-01-安装基础命令

Docker-01-安装&基础命令 文章目录 Docker-01-安装&基础命令一、Docker是什么&#xff1f;二、安装Docker①&#xff1a;卸载旧版②&#xff1a;配置Docker的yum库③&#xff1a;安装Docker④&#xff1a;启动和校验⑤&#xff1a;配置镜像加速01&#xff1a;注册阿里云…

第二证券:旅游股大涨 “预热”春节黄金周

在淄博烧烤热、哈尔滨冰雪热火爆出圈后&#xff0c;希望能接住文旅下一波“泼天富贵”的各地文旅局各出奇招并“卷”出新高度&#xff0c;被各地网友谈论“杀疯了”。 其间&#xff0c;A股游览概念股迎来一波集体上涨&#xff0c;成为不少出资者的重视热点&#xff0c;而行将到…

人机协同中存在一个独特的时空体系

一、在人机协同中存在一个独特的时空体系 在人机这个独特的时空体系中&#xff0c;人和机器之间的时间和空间的交织和共同作用。 在时间维度上&#xff0c;人机协同体系中的人和机器具有不同的时间节奏和速度。人类有限的生命周期和有时候需要休息的需求使得他们的工作时间和生…

Java 使用 EasyExcel 爬取数据

一、爬取数据的基本思路 分析要爬取数据的来源 1. 查找数据来源&#xff1a;浏览器按 F12 或右键单击“检查”打开开发者工具查看数据获取时的请求地址 2. 查看接口信息&#xff1a;复制请求地址直接到浏览器地址栏输入看能不能取到数据 3. 推荐安装插件&#xff1a;FeHelper&a…

Dockerfile: CMD与ENTRYPOINT区别

CMD和ENTRYPOINT的作用 CMD和ENTRYPOINT这两个命令&#xff0c;我接触到的是用在了Dockerfile中用于构建容器。 CMD&#xff1a;The main purpose of a CMD is to provide defaults for an executing container. CMD的主要用途是为正在执行的容器提供默认值。也就是指定这个容…

力扣hot100 多数元素 摩尔投票

Problem: 169. 多数元素 文章目录 思路解题方法复杂度&#x1f496; Code&#x1f468;‍&#x1f3eb; 参考代码 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f468;‍&#x1f3eb; 参考图解 解题方法 描述你的解题方法 复杂度 时间复杂度: 添加时间复杂度, 示例…

成都爱尔谭娇解读眼睑松弛“提拉”要趁早,避免遮挡损害视力!

眼皮耷拉无力没法抬起&#xff0c;仿佛永远没睡醒。 怎么使力都没用眼睛就是睁不开&#xff0c; 甚至两只眼睛一大一小不对称&#xff0c; 这种时候要警惕一种病症“上睑下垂”! 早期上睑下垂症状并不明显&#xff0c;很容易被忽视&#xff0c;但眼睑下垂时间久了可能会对视力产…

ArcGIS Pro 拓扑编辑和常见一些拓扑错误处理

7.4 拓扑编辑 拓扑编辑也叫共享编辑&#xff0c;多个数据修改时&#xff0c;一块修改&#xff0c;如使用数据&#xff1a;chp7\拓扑检查.gdb,数据集DS下JZX、JZD和DK&#xff0c;加载地图框中&#xff0c;在“地图”选项卡下选择“地图拓扑”或“ds_Topology(地理数据库)”&…

23年全球数字经济发展如何?这本《白皮书》告诉你答案丨附下载

这一年&#xff0c;全球主要国家优化数字经济政策布局&#xff0c; 促进数字产业化创新升级、发展数字基础设施&#xff1b; 这一年&#xff0c;全域国际合作让“命运共同体” 构建见成效&#xff0c; 全球经济多极化趋势加强&#xff0c;中国坐拥Top1数字市场&#xff1b; …

Java NIO (一)简介

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

go服务分片下载文件+分片上传文件

目录 先看效果 全代码实现 注意 完整输出 如有帮助&#xff0c;欢迎留下足迹哦&#xff01; 先看效果 待上传的源文件&#xff08;这里以一个140多M的为例&#xff09; 上传后服务端下载完成的文件&#xff08;result.exe&#xff09;&#xff1a; 全代码实现 定义主要路…

WebRTC视频会议/视频客服系统EasyRTC进入会议室密码验证的开发与实现

基于WebRTC技术的EasyRTC视频会议系统&#xff0c;建设目标是让用户随时随地、快捷方便地进行视频会议&#xff0c;并根据行业需求有针对性地提供多样化、个性化功能&#xff0c;该系统是覆盖全球的实时音视频开发平台&#xff0c;支持一对一、一对多等视频通话&#xff0c;极大…

第二证券:行业术语解读:CPO概念是什么意思?

cpo概念又名共封装光学概念&#xff0c;它是指把硅光模块和CMOS芯片用高级封装的方法耦合在背板PCB上&#xff0c;从而在成本、功耗和尺度上都进一步提升数据中心使用中的光互联技能等相关上市公司组成的概念。 概念股&#xff0c;并不特指于某一支股&#xff0c;而是一个选股话…

Git 常用命令详解及如何在IDEA中操作

文章目录 前言发现宝藏一、初识Git1.Git概述2. Git的功能3. Git运行图示 二、Git下载安装三、Git 代码托管服务1.常用的 Git 代码托管服务2.使用码云代码托管服务 四、Git 常用命令1.Git 全局设置2.获取Git 仓库3.工作区、暂存区、版本库 概念4.Git 工作区中文件的两种状态5.本…

【STM32CubeMX串口通信详解】USART1 -- DMA发送 + DMA空闲中断 接收不定长数据

文章目录&#xff1a; 前言 一、准备工作 1、接线 2、新建工程 二、CubeMX的配置 1、USART1 配置 异步通信 2、通信协议参数 3、打开DMA发送、接收 三、发送操作、代码解释 四、printf 重定向到USART1 五、接收代码的编写 1、定义一个结构体变量&a…