JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2024-09-22
目录

至少有 1 位重复的数字Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给定正整数 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

# 思路

dp数组

# 解法

class Solution {
    public int numDupDigitsAtMostN(int n) {
        String s = String.valueOf(n);
        char[] chs = s.toCharArray();
        int len = chs.length, c = 1, m = 0;
        if (len == 1) return 0;
        int[] dp = new int[len];
        for (int i = 1; i < len; i++) {
            dp[i] = (int) Math.pow(10, i) - (c = (10 - len + i) * c);
        }
        c = 9;
        int c0 = 9;
        for (int i = 1; i < len-1; i++) {
            m += ((c0=c0*10) - (c=c*(10 - i)));
        }
        int f = 0;
        for (int i = 0; i < len; i++) {
            int t = chs[i] - '0', k = 0;
            for (int j = 0; j < t; j++) {
                if ((f & (1 << j)) == 0) k++;
            }
            m += ((t - k)*(int) Math.pow(10, len - i - 1));
            if (i == 0) k--;
            m += (dp[len - i - 1] * k);
            if ((f & (1 << t)) != 0) return m + (i+1 < len ? Integer.parseInt(s.substring(i+1)) : 0) + 1;
            f |= (1 << t);
        }
        return m;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
#Java
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式