LeetCode 2719. 统计整数数目,数位dp板子题

这篇具有很好参考价值的文章主要介绍了LeetCode 2719. 统计整数数目,数位dp板子题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、题目

1、题目描述

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

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

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

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

2、接口描述

class Solution {
public:
    int count(string num1, string num2, int min_sum, int max_sum) {
        
    }
};

3、原题链接

2719. 统计整数数目


二、解题报告

1、思路分析

数位dp板子题

数位dp详见:数位dp详解,记忆化搜索,递推,OJ精讲-CSDN博客

设计状态f[n][pre][lim]为剩余n位,n位之前的数位和为pre,前面枚举位和给定数字对应位大小关系为lim

那么转移方程为f[n][pre][lim] = Σdfs(n - 1 , pre + i , lim || i < ceil) , 其中ceil = lim ? 9 : d[n]

跑板子即可,确实没什么说的,只要学过数位dp很容易就套板子套出来了

由于给出的数字是高精度字符串,所以对于小的那个数字-1的时候按照高精度的处理方式来,细节处理好

2、复杂度

时间复杂度: O(n * 9 * n * 9) 空间复杂度:O(n * 9 * n)文章来源地址https://www.toymoban.com/news/detail-798079.html

3、代码详解

class Solution
{
public:
#define N 24
	typedef long long ll;
	const ll MOD = 1e9 + 7;
	ll f[N][N * 9];
	int r, l, d[N], len, n1, n2;
	Solution() { memset(f, -1, sizeof(f)); }
	int count(string num1, string num2, int min_sum, int max_sum)
	{
		function<int(int, int, bool)> dfs = [&](int n, int pre, bool lim) -> int
		{
			if (!n)
				return pre >= min_sum && pre <= max_sum;
			if (lim && ~f[n][pre])
				return f[n][pre];
			ll res = 0, ceil = lim ? 9 : d[n];
			for (int i = 0; i <= ceil; i++)
				res = (res + dfs(n - 1, pre + i, lim || i < ceil)) % MOD;
			if (lim)
				return f[n][pre] = res;
			return res;
		};
		n2 = num2.size(), n1 = num1.size() , len = 0;
		while (n2--)
			d[++len] = (num2[n2] ^ 48);
		r = dfs(len, 0, false);
		len = 0;
		while (n1--)
			d[++len] = (num1[n1] ^ 48);
		n1 = 1;
		d[1]--;
		while (n1 <= len && d[n1] == -1)
			d[n1++] += 10, d[n1]--;
		l = dfs(len, 0, false);
		return (r - l + MOD) % MOD;
	}
};

到了这里,关于LeetCode 2719. 统计整数数目,数位dp板子题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode---121双周赛---数位dp

    2996. 大于等于顺序前缀和的最小缺失整数 2997. 使数组异或和等于 K 的最少操作次数 2998. 使 X 和 Y 相等的最少操作次数 2999. 统计强大整数的数目 简单的模拟题,只要按照题目的要求去写代码即可,代码如下 这题考异或的性质---相同为0,相异为1,我们只要关心nums的异或和与

    2024年01月22日
    浏览(38)
  • LeetCode 周赛 348(2023/06/05)数位 DP 模板学会了吗

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 加入知识星球提问! 往期回顾:LeetCode 单周赛第 347 场 · 二维空间上的 LIS 最长递增子序列问题 T1. 最小化字符串长度(Medium) 标签:散列表、计数 T2. 半有序排列(Easy) 标签:散列表 T3. 查询后矩阵的和(

    2024年02月07日
    浏览(46)
  • LeetCode2444: 统计定界子数组的数目

    【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 给你一个整数数组 nums 和两个整数 minK 以及 maxK 。 nums 的定界子数组是满足下述条件的一个子数组: 子数组中的 最小值 等于 minK 。 子数组中的 最大值 等于 maxK 。 返回定界子数组的数目。 子数组是数组中的一个连续部

    2024年02月01日
    浏览(25)
  • 区间合并|LeetCode2963:统计好分割方案的数目

    【动态规划】【广度优先】LeetCode2258:逃离火灾 区间合并 给你一个下标从 0 开始、由 正整数 组成的数组 nums。 将数组分割成一个或多个 连续 子数组,如果不存在包含了相同数字的两个子数组,则认为是一种 好分割方案 。 返回 nums 的 好分割方案 的 数目。 由于答案可能很

    2024年02月03日
    浏览(31)
  • 【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

    图论 分类讨论 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 1 = i n ,都存在一条街道连接编号为 i 的房屋与编号为 i + 1 的房屋。另存在一条街道连接编

    2024年04月13日
    浏览(23)
  • 2023-08-23 LeetCode每日一题(统计点对的数目)

    点击跳转到题目位置 给你一个无向图,无向图由整数 n ,表示图中节点的数目,和 edges 组成,其中 edges[i] = [u i , v i ] 表示 u i 和 v i 之间有一条无向边。同时给你一个代表查询的整数数组 queries 。 第 j 个查询的答案是满足如下条件的点对 (a, b) 的数目: a b cnt 是与 a 或者 b

    2024年02月11日
    浏览(37)
  • 每日一题:leetcode 1448 统计二叉树中好节点的数目

    给你一棵根为  root  的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 示例 2: 示例 3: 提示: 二叉树中节点数目范围是  [1, 10^5]  。 每个节点权值的范围是  [-10^4, 10^4]  。 思路

    2024年02月11日
    浏览(30)
  • Leetcode每日一题:1448. 统计二叉树中好节点的数目

    给你一棵根为  root  的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 示例 2: 示例 3: 提示: 二叉树中节点数目范围是  [1, 10^5]  。 每个节点权值的范围是  [-10^4, 10^4]  。 显然

    2024年02月11日
    浏览(27)
  • Leetcode每日一题:1782. 统计点对的数目(2023.8.24 C++)

    目录 1782. 统计点对的数目 题目描述: 实现代码与解析: hash + 双指针 原理思路:         给你一个无向图,无向图由整数  n   ,表示图中节点的数目,和  edges  组成,其中  edges[i] = [ui, vi]  表示  ui  和  vi  之间有一条无向边。同时给你一个代表查询的整数数组 

    2024年02月10日
    浏览(31)
  • 2023-08-25 LeetCode每日一题(统计二叉树中好节点的数目)

    点击跳转到题目位置 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 示例 2: 示例 3: 提示: 二叉树中节点数目范围是 [1, 10 5 ] 。 每个节点权值的范围是 [-10

    2024年02月11日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包