2719. 统计整数数目

给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_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

题解:

code:

class Solution {static final int N = 23;static final int M = 401;static final int MOD = 1000000007;int[][] d;String num;int min_sum;int max_sum;public int count(String num1, String num2, int min_sum, int max_sum) {d = new int[N][M];for (int i = 0; i < N; i++) {Arrays.fill(d[i], -1);}this.min_sum = min_sum;this.max_sum = max_sum;return (get(num2) - get(sub(num1)) + MOD) % MOD;}public int get(String num) {this.num = new StringBuffer(num).reverse().toString();return dfs(num.length() - 1, 0, true);}// 求解 num - 1,先把最后一个非 0 字符减去 1,再把后面的 0 字符变为 9public String sub(String num) {char[] arr = num.toCharArray();int i = arr.length - 1;while (arr[i] == '0') {i--;}arr[i]--;i++;while (i < arr.length) {arr[i] = '9';i++;}return new String(arr);}public int dfs(int i, int j, boolean limit) {if (j > max_sum) {return 0;}if (i == -1) {return j >= min_sum ? 1 : 0;}if (!limit && d[i][j] != -1) {return d[i][j];}int res = 0;int up = limit ? num.charAt(i) - '0' : 9;for (int x = 0; x <= up; x++) {res = (res + dfs(i - 1, j + x, limit && x == up)) % MOD;}if (!limit) {d[i][j] = res;}return res;}
}

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

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

相关文章

【LeetCode:76. 最小覆盖子串 | 滑动窗口】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【Element】el-input 限定输入是 只能是数字和符号 -

<template><div><el-input v-model"inputValue" input"handleInput"></el-input></div> </template><script> export default {data() {return {inputValue: };},methods: {handleInput(value) {// 使用正则表达…

LeetCode刷题--- 粉刷房子

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

Julia系列16:Julia与python/c互调

1 Julia调用python 通过PyCall包&#xff0c;Julia可以直接调用Python包。例如&#xff1a; using PyCall np pyimport("numpy") x np.linspace(1, 10, 10)数值、布尔、字符串、IO stream、函数、元组、数组或列表、以及包含这些类型的字典等&#xff0c;它们都会…

LeetCode.82 删除排序链表中的重复元素 二

LeetCode.82 删除排序链表中的重复元素 二 题目 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode* head) {if(head NULL) return head;struct ListNode* _…

Gradle 安装及源替换详解

在软件开发的过程中&#xff0c;Gradle 是一个强大且灵活的构建工具&#xff0c;被广泛应用于 Java、Android、Kotlin 等项目。本文将为您提供 Gradle 的安装步骤以及如何更换源的详细说明和代码示例。 一. Gradle 安装步骤 以下是在 Windows 操作系统上安装 Gradle 的步骤&am…

帆软报表11.0.19增加postgres数据源方案

项目使用postgres数据库&#xff0c;帆软报表集成开发时需要手工增加该数据源。 https://help.fanruan.com/finereport/doc-view-2563.html 但增加数据源后测试报告无此驱动&#xff0c;经查看文档&#xff0c;现在是通过驱动管理来上传&#xff0c; 但新版又不允许上传驱动JAR…

「HDLBits题解」Always casez

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接&#xff1a;Always casez - HDLBits // synthesis verilog_input_version verilog_2001 module top_module (input [7:0] in,output reg [2:0]…

ai智能语音机器人系统的话术怎样设置效果比较好

设置一个AI智能语音机器人的话术&#xff0c;以实现最佳效果&#xff0c;涉及以下几个关键方面&#xff1a; 1. 自然语言处理&#xff08;NLP&#xff09;&#xff1a;AI机器人的话术需要能够理解和处理用户的自然语言输入。使用NLP技术来识别语义、意图和实体&#xff0c;并针…

Pointnet++改进注意力机制系列:全网首发SE通道注意力机制 |即插即用,实现有效涨点!

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入SE注意力机制,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤

走迷宫(c语言)

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…

C# Guid生成唯一值用例

GUID&#xff08;全局唯一标识符&#xff09;是一个128位的数字&#xff0c;通常用来唯一标识信息。GUID 的生成算法保证了在相同的时空条件下&#xff0c;基本上不会生成重复的值。这是因为GUID的生成算法结合了多种不同的信息&#xff0c;包括时间戳、计算机的 MAC 地址、随机…

2024年【上海市安全员C3证】模拟考试题及上海市安全员C3证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年上海市安全员C3证模拟考试题为正在备考上海市安全员C3证操作证的学员准备的理论考试专题&#xff0c;每个月更新的上海市安全员C3证模拟考试题库祝您顺利通过上海市安全员C3证考试。 1、【多选题】《上海市建设…

STC15系列单片机:定时器/计数器16位自动重装载模式

一、定时器与计数器的理解 STC15系列单片机内部有5个16位定时器/计数器&#xff0c;分别是T0、T1、T2、T3、T4。 定时器与计数器&#xff0c;东西还是同一个东西&#xff0c;只是用法和功效不一样&#xff0c;就好比黄瓜&#xff0c;既可以内服也可以外敷&#xff0c;黄瓜还是…

深入理解 go chan

go 里面&#xff0c;在实际程序运行的过程中&#xff0c;往往会有很多协程在执行&#xff0c;通过启动多个协程的方式&#xff0c;我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信&#xff0c;不同于以往多线程程序的那种通信方式&#xff0c;在 go 里面是通过…

Rust-所有权和移动语义

什么是所有权 拿C语言的代码来打个比方。我们可能会在堆上创建一个对象&#xff0c;然后使用一个指针来管理这个对象&#xff1a; Foo *p make_object("args");接下来&#xff0c;我们可能需要使用这个对象&#xff1a; use_object(p);然而&#xff0c;这段代码之…

继承、修饰符、工具类、jar包

目录 1.继承 2.修饰符 3.工具类 4.jar包的制作与使用 1.继承 是什么 1.面向对象的三大特征之一&#xff08;封装、继承、多态&#xff09; 2.可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法。 继承的格式 public class F…

Camtasia2024最新版本如何进行电脑录制屏幕?

在现在的网络互联网时代&#xff0c;越来越多的人走上了自媒体的道路。有些自媒体人会自己在网络上录制精彩视频&#xff0c;也有一些人会将精彩、热门的电影剪辑出来再加上自己给它的配音&#xff0c;做成大家喜欢看的电影剪辑片段。相信不管大家是自己平时有独特的爱好也好、…

瑞吉外卖笔记系列(1) —— 环境配置,后台登录和退出的功能实现

本文档主要介绍软件开发整体流程和瑞吉外卖项目&#xff0c;开发环境搭建步骤&#xff0c;以及简单的后台系统功能实现 文章目录 一、软件开发整体介绍1.1软件开发流程1.2 角色分工1.3 软件环境 二、瑞吉外卖项目介绍2.1 项目介绍2.2 产品原型展示2.3 技术选型2.4 功能架构2.5 …

目标检测应用场景—数据集【NO.25】牛行为检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…