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;}
}

相关内容

热门资讯

常州法院2025年前三季度调解... 调解结案16474件、调解成功率24.08%——这是2025年前三季度常州法院交出的司法成绩单。通过...
安徽省政协研究室副主任陈鑫已任... 据铜陵市政府官网消息,11月20日上午,市委举行理论学习中心组学习会议,邀请省委社会工作部副部长高维...
原创 联... 据光明网报道,11月19日,在联合国大会的讨论中,日本企图争取成为安理会常任理事国的梦想再次破灭,令...
南部关于全县规范法律咨询服务机... 一、专项行动时间 自即日起至2025年12月。 二、举报受理范围 社会各界反映强烈的某些法律咨询服务...
“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...
绝不允许日本军国主义幽灵复活!... 2025年11月7日,日本首相高市早苗宣称,如果中国大陆对台湾出动军舰并使用武力,可能会构成“存亡危...
【解决】AI法律助手荣获202... 2025全球数字经济大会启幕,搭建国际数字合作高端平台 经国务院批准,由北京市人民政府、国家互联网信...
嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...