diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/README.md b/solution/3000-3099/3032.Count Numbers With Unique Digits II/README.md index 9926c4ce2d5d2..7d7fb0eda6eaf 100644 --- a/solution/3000-3099/3032.Count Numbers With Unique Digits II/README.md +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/README.md @@ -257,4 +257,108 @@ function numberCount(a: number, b: number): number { +### 方法 2 + + + +```python +class Solution: + def numberCount(self, a: int, b: int) -> int: + return sum(len(set(str(num))) == len(str(num)) for num in range(a, b + 1)) +``` + +```java +class Solution { + public int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isValid(i)) { + ++res; + } + } + return res; + } + private boolean isValid(int n) { + boolean[] present = new boolean[10]; + Arrays.fill(present, false); + while (n > 0) { + int dig = n % 10; + if (present[dig]) { + return false; + } + present[dig] = true; + n /= 10; + } + return true; + } +} +``` + +```cpp +class Solution { +public: + bool isvalid(int n) { + vector present(10, false); + while (n) { + const int dig = n % 10; + if (present[dig]) + return false; + present[dig] = true; + n /= 10; + } + return true; + } + int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isvalid(i)) { + ++res; + } + } + return res; + } +}; +``` + +```go +func numberCount(a int, b int) int { + count := 0 + for num := a; num <= b; num++ { + if hasUniqueDigits(num) { + count++ + } + } + return count +} +func hasUniqueDigits(num int) bool { + digits := strconv.Itoa(num) + seen := make(map[rune]bool) + for _, digit := range digits { + if seen[digit] { + return false + } + seen[digit] = true + } + return true +} +``` + +```ts +function numberCount(a: number, b: number): number { + let count: number = 0; + for (let num = a; num <= b; num++) { + if (hasUniqueDigits(num)) { + count++; + } + } + return count; +} +function hasUniqueDigits(num: number): boolean { + const digits: Set = new Set(num.toString().split('')); + return digits.size === num.toString().length; +} +``` + + + diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/README_EN.md b/solution/3000-3099/3032.Count Numbers With Unique Digits II/README_EN.md index 4e3b61117b093..e456c39184854 100644 --- a/solution/3000-3099/3032.Count Numbers With Unique Digits II/README_EN.md +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/README_EN.md @@ -255,4 +255,108 @@ function numberCount(a: number, b: number): number { +### Solution 2 + + + +```python +class Solution: + def numberCount(self, a: int, b: int) -> int: + return sum(len(set(str(num))) == len(str(num)) for num in range(a, b + 1)) +``` + +```java +class Solution { + public int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isValid(i)) { + ++res; + } + } + return res; + } + private boolean isValid(int n) { + boolean[] present = new boolean[10]; + Arrays.fill(present, false); + while (n > 0) { + int dig = n % 10; + if (present[dig]) { + return false; + } + present[dig] = true; + n /= 10; + } + return true; + } +} +``` + +```cpp +class Solution { +public: + bool isvalid(int n) { + vector present(10, false); + while (n) { + const int dig = n % 10; + if (present[dig]) + return false; + present[dig] = true; + n /= 10; + } + return true; + } + int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isvalid(i)) { + ++res; + } + } + return res; + } +}; +``` + +```go +func numberCount(a int, b int) int { + count := 0 + for num := a; num <= b; num++ { + if hasUniqueDigits(num) { + count++ + } + } + return count +} +func hasUniqueDigits(num int) bool { + digits := strconv.Itoa(num) + seen := make(map[rune]bool) + for _, digit := range digits { + if seen[digit] { + return false + } + seen[digit] = true + } + return true +} +``` + +```ts +function numberCount(a: number, b: number): number { + let count: number = 0; + for (let num = a; num <= b; num++) { + if (hasUniqueDigits(num)) { + count++; + } + } + return count; +} +function hasUniqueDigits(num: number): boolean { + const digits: Set = new Set(num.toString().split('')); + return digits.size === num.toString().length; +} +``` + + + diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.cpp b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.cpp new file mode 100644 index 0000000000000..7cca706937004 --- /dev/null +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.cpp @@ -0,0 +1,23 @@ +class Solution { +public: + bool isvalid(int n) { + vector present(10, false); + while (n) { + const int dig = n % 10; + if (present[dig]) + return false; + present[dig] = true; + n /= 10; + } + return true; + } + int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isvalid(i)) { + ++res; + } + } + return res; + } +}; diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.go b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.go new file mode 100644 index 0000000000000..8824b800510c3 --- /dev/null +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.go @@ -0,0 +1,20 @@ +func numberCount(a int, b int) int { + count := 0 + for num := a; num <= b; num++ { + if hasUniqueDigits(num) { + count++ + } + } + return count +} +func hasUniqueDigits(num int) bool { + digits := strconv.Itoa(num) + seen := make(map[rune]bool) + for _, digit := range digits { + if seen[digit] { + return false + } + seen[digit] = true + } + return true +} diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.java b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.java new file mode 100644 index 0000000000000..44dbbfadb3706 --- /dev/null +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.java @@ -0,0 +1,24 @@ +class Solution { + public int numberCount(int a, int b) { + int res = 0; + for (int i = a; i <= b; ++i) { + if (isValid(i)) { + ++res; + } + } + return res; + } + private boolean isValid(int n) { + boolean[] present = new boolean[10]; + Arrays.fill(present, false); + while (n > 0) { + int dig = n % 10; + if (present[dig]) { + return false; + } + present[dig] = true; + n /= 10; + } + return true; + } +} diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.py b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.py new file mode 100644 index 0000000000000..13a3853d4bc08 --- /dev/null +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.py @@ -0,0 +1,3 @@ +class Solution: + def numberCount(self, a: int, b: int) -> int: + return sum(len(set(str(num))) == len(str(num)) for num in range(a, b + 1)) diff --git a/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.ts b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.ts new file mode 100644 index 0000000000000..07630fc243648 --- /dev/null +++ b/solution/3000-3099/3032.Count Numbers With Unique Digits II/Solution2.ts @@ -0,0 +1,13 @@ +function numberCount(a: number, b: number): number { + let count: number = 0; + for (let num = a; num <= b; num++) { + if (hasUniqueDigits(num)) { + count++; + } + } + return count; +} +function hasUniqueDigits(num: number): boolean { + const digits: Set = new Set(num.toString().split('')); + return digits.size === num.toString().length; +}