Skip to content

Commit 28198fb

Browse files
committed
一刷357
1 parent c1f750a commit 28198fb

5 files changed

Lines changed: 83 additions & 21 deletions

File tree

README.adoc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2524,14 +2524,14 @@ TIP: **公众号的微信号是: `jikerizhi`**。__因为众所周知的原因
25242524
//|{doc_base_url}/0356-line-reflection.adoc[题解]
25252525
//|Medium
25262526
//|
2527-
//
2528-
//|{counter:codes}
2529-
//|{leetcode_base_url}/count-numbers-with-unique-digits/[357. Count Numbers with Unique Digits^]
2530-
//|{source_base_url}/_0357_CountNumbersWithUniqueDigits.java[Java]
2531-
//|{doc_base_url}/0357-count-numbers-with-unique-digits.adoc[题解]
2532-
//|Medium
2533-
//|
2534-
//
2527+
2528+
|{counter:codes}
2529+
|{leetcode_base_url}/count-numbers-with-unique-digits/[357. Count Numbers with Unique Digits^]
2530+
|{source_base_url}/_0357_CountNumbersWithUniqueDigits.java[Java]
2531+
|{doc_base_url}/0357-count-numbers-with-unique-digits.adoc[题解]
2532+
|Medium
2533+
|
2534+
25352535
//|{counter:codes}
25362536
//|{leetcode_base_url}/rearrange-string-k-distance-apart/[358. Rearrange String k Distance Apart^]
25372537
//|{source_base_url}/_0358_RearrangeStringKDistanceApart.java[Java]
Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,58 @@
11
[#0357-count-numbers-with-unique-digits]
2-
= 357. Count Numbers with Unique Digits
2+
= 357. 统计各位数字都不同的数字个数
33

4-
{leetcode}/problems/count-numbers-with-unique-digits/[LeetCode - Count Numbers with Unique Digits^]
4+
https://leetcode.cn/problems/count-numbers-with-unique-digits/[LeetCode - 357. 统计各位数字都不同的数字个数 ^]
55

6-
Given a *non-negative* integer n, count all numbers with unique digits, x, where 0 ≤ x < 10^n^.
6+
给你一个整数 `n` ,统计并返回各位数字都不同的数字 `x` 的个数,其中 `0 \<= x < 10^n^`
77

8+
*示例 1:*
89

9-
*Example:*
10+
....
11+
输入:n = 2
12+
输出:91
13+
解释:答案应为除去 11、22、33、44、55、66、77、88 、99 外,在 0 ≤ x < 100 范围内的所有数字。
14+
....
1015

11-
[subs="verbatim,quotes,macros"]
12-
----
13-
*Input:* 2
14-
*Output:* 91
15-
*Explanation:* The answer should be the total numbers in the range of 0 ≤ x < 100,
16-
excluding `11,22,33,44,55,66,77,88,99`
17-
----
16+
*示例 2:*
17+
18+
....
19+
输入:n = 0
20+
输出:1
21+
....
22+
23+
*提示:*
24+
25+
* `+0 <= n <= 8+`
1826
1927
28+
== 思路分析
29+
30+
排列组合。组成不重复的数字,有可能有 1 ~ n 位。所以,分别计算组合数,求总和就行。
2031

2132
[[src-0357]]
33+
[tabs]
34+
====
35+
一刷::
36+
+
37+
--
2238
[{java_src_attr}]
2339
----
2440
include::{sourcedir}/_0357_CountNumbersWithUniqueDigits.java[tag=answer]
2541
----
42+
--
43+
44+
// 二刷::
45+
// +
46+
// --
47+
// [{java_src_attr}]
48+
// ----
49+
// include::{sourcedir}/_0357_CountNumbersWithUniqueDigits_2.java[tag=answer]
50+
// ----
51+
// --
52+
====
53+
54+
55+
== 参考资料
2656

57+
. https://leetcode.cn/problems/count-numbers-with-unique-digits/solutions/1403485/tong-ji-ge-wei-shu-zi-du-bu-tong-de-shu-iqbfn/[357. 统计各位数字都不同的数字个数 - 官方题解^] -- 代码更简单,而且重用了低位的计算结果。
58+
. https://leetcode.cn/problems/count-numbers-with-unique-digits/solutions/1411205/by-ac_oier-6tfl/[357. 统计各位数字都不同的数字个数 - 【宫水三叶】一题双解 :「乘法原理」&「数位 DP(进阶)」^]

docs/index.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@ include::0355-design-twitter.adoc[leveloffset=+1]
799799

800800
// include::0356-line-reflection.adoc[leveloffset=+1]
801801

802-
// include::0357-count-numbers-with-unique-digits.adoc[leveloffset=+1]
802+
include::0357-count-numbers-with-unique-digits.adoc[leveloffset=+1]
803803

804804
// include::0358-rearrange-string-k-distance-apart.adoc[leveloffset=+1]
805805

logbook/202503.adoc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1204,13 +1204,18 @@ endif::[]
12041204
|{doc_base_url}/0349-intersection-of-two-arrays.adoc[题解]
12051205
|✅ 排序+双指针!也可以使用 `Set`,只是空间复杂度高一点。
12061206

1207-
12081207
|{counter:codes2503}
12091208
|{leetcode_base_url}/design-twitter/[355. 设计推特^]
12101209
|{doc_base_url}/0355-design-twitter.adoc[题解]
12111210
|✅ 利用列表存储,来维持前后顺序;或者,增加时间戳字段。
12121211

12131212

1213+
|{counter:codes2503}
1214+
|{leetcode_base_url}/count-numbers-with-unique-digits/[357. 统计各位数字都不同的数字个数^]
1215+
|{doc_base_url}/0357-count-numbers-with-unique-digits.adoc[题解]
1216+
|✅ 数学题。排列组合。
1217+
1218+
12141219
|===
12151220

12161221
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.diguage.algo.leetcode;
2+
3+
public class _0357_CountNumbersWithUniqueDigits {
4+
// tag::answer[]
5+
/**
6+
* @author D瓜哥 · https://www.diguage.com
7+
* @since 2025-07-18 22:28:36
8+
*/
9+
public int countNumbersWithUniqueDigits(int n) {
10+
int result = 1;
11+
for (int i = n; i > 0; i--) {
12+
if (i == 1) {
13+
result += 9;
14+
} else {
15+
int temp = 9 * 9;
16+
for (int j = 3; j <= i; j++) {
17+
temp *= (10 - j + 1);
18+
}
19+
result += temp;
20+
}
21+
}
22+
return result;
23+
}
24+
// end::answer[]
25+
}

0 commit comments

Comments
 (0)