LeetCode_动态规划_数位 dp_困难_1012.至少有 1 位重复的数字
创始人
2025-05-31 06:54:45
0

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

给定正整数 n,返回在 [1, n] 范围内具有至少 1 位重复数字的正整数的个数。

示例 1:
输入:n = 20
输出:1
解释:具有至少 1 位重复数字的正数(<= 20)只有 11 。

示例 2:
输入:n = 100
输出:10
解释:具有至少 1 位重复数字的正数(<= 100)有 11,22,33,44,55,66,77,88,99 和 100 。

示例 3:
输入:n = 1000
输出:262

提示:
1 <= n <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/numbers-with-repeated-digits

2.思路

(1)暴力穷举法
使用 for 循环对 [1, n] 内的每个整数 i 进行判断,如果 i 具有至少 1 位重复数字,则 res++(初始值为 0),遍历结束时返回 res 即可。但是显然该方法的时间复杂度较高,在 LeetCode 中提交时会出现“超出时间限制”的提示!

(2)动态规划 & 数位 dp
思路参考本题官方题解。

3.代码实现(Java)

//思路1————暴力穷举法
class Solution {public int numDupDigitsAtMostN(int n) {int res = 0;for (int i = 1; i <= n; i++) {if (isRepetitive(i)) {res++;}}return res;}//判断整数 num 是否具有至少 1 位重复数字public boolean isRepetitive(int num) {String str = String.valueOf(num);Set set = new HashSet<>();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (!set.contains(c)) {set.add(c);} else {return true;}}return false;}
}
//思路2————动态规划
class Solution {int[][] dp;public int numDupDigitsAtMostN(int n) {String sn = String.valueOf(n);dp = new int[sn.length()][1 << 10];for (int i = 0; i < sn.length(); i++) {Arrays.fill(dp[i], -1);}return n + 1 - f(0, sn, 0, true);}//返回 [1, n] 内没有重复数字的正整数个数public int f(int mask, String sn, int i, boolean same) {if (i == sn.length()) {return 1;}if (!same && dp[i][mask] >= 0) {return dp[i][mask];}int res = 0, t = same ? (sn.charAt(i) - '0') : 9;for (int k = 0; k <= t; k++) {if ((mask & (1 << k)) != 0) {continue;}res += f(mask == 0 && k == 0 ? mask : mask | (1 << k), sn, i + 1, same && k == t);}if (!same) {dp[i][mask] = res;}return res;}
}

相关内容

热门资讯

三部门发文明确7条政策措施 优... 原标题:三部门发文明确7条政策措施(引题) 优化国企技能岗位薪酬分配(主题) 人民日报北京5月31日...
2025跨境电商专题政策法规汇... 今天分享的是:2025跨境电商专题政策法规汇编 报告共计:105页 跨境电商政策法规核心解读:红利与...
面试历程(5) 1、Time_Wait的产生和危害以及解决方案 time-wait的产生: 在TCP连接中四次挥手关...
【必须收藏】C语言·专升本·期... 《C语言程序设计》是计算机专业的必修棵,除了学校的期末考试,计算机二级考...
Python自动化测试多个运行... 目录 前言 使用Python版本管理工具 使用Python虚拟环境 poetry 管理工具 前言 ...
如何利用Web3D技术打造在线... 随着Web3D技术的不断发展,越来越多的企业和组织开始将其应用于虚拟展览馆的建设中。虚...
讀聽評述|“分手费”借条无效 ... 近日,海南万宁一女子以自杀胁迫前男友签下百万“借条”索要分手费,法院最终认定协议无效。这一判决不仅维...
经济政策一线微观察|银发专列激... 随着我国老龄化进程加快,“银发族”成为文旅市场新蓝海。银发专列应运而生,凭借适老化设施与贴心服务,为...
23人送医,损失超3亿韩元!首... 据央视新闻报道,当地时间5月31日,首尔地铁5号线一列车发生火灾,乘客被紧急疏散。据初步调查,火灾原...
Integer类型比较(127...   这个是比较基础的问题,也是常见的问题,也是经常会被问到的问题...