Skip to content

Commit e29005a

Browse files
committed
feat: add solutions to lc problem: No.1079
No.1079.Letter Tile Possibilities
1 parent e12a2f6 commit e29005a

File tree

5 files changed

+239
-2
lines changed

5 files changed

+239
-2
lines changed

solution/1000-1099/1079.Letter Tile Possibilities/README.md

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,104 @@
5353
<!-- 这里可写当前语言的特殊实现逻辑 -->
5454

5555
```python
56-
56+
class Solution:
57+
def numTilePossibilities(self, tiles: str) -> int:
58+
def dfs():
59+
ans = 0
60+
for i in range(26):
61+
if cnt[i]:
62+
ans += 1
63+
cnt[i] -= 1
64+
ans += dfs()
65+
cnt[i] += 1
66+
return ans
67+
68+
cnt = [0] * 26
69+
for t in tiles:
70+
cnt[ord(t) - ord('A')] += 1
71+
return dfs()
5772
```
5873

5974
### **Java**
6075

6176
<!-- 这里可写当前语言的特殊实现逻辑 -->
6277

6378
```java
79+
class Solution {
80+
public int numTilePossibilities(String tiles) {
81+
int[] cnt = new int[26];
82+
for (char c : tiles.toCharArray()) {
83+
++cnt[c - 'A'];
84+
}
85+
return dfs(cnt);
86+
}
87+
88+
private int dfs(int[] cnt) {
89+
int res = 0;
90+
for (int i = 0; i < cnt.length; ++i) {
91+
if (cnt[i] > 0) {
92+
++res;
93+
--cnt[i];
94+
res += dfs(cnt);
95+
++cnt[i];
96+
}
97+
}
98+
return res;
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
class Solution {
107+
public:
108+
int numTilePossibilities(string tiles) {
109+
vector<int> cnt(26);
110+
for (char& c : tiles) ++cnt[c - 'A'];
111+
return dfs(cnt);
112+
}
113+
114+
int dfs(vector<int>& cnt) {
115+
int res = 0;
116+
for (int i = 0; i < 26; ++i)
117+
{
118+
if (cnt[i])
119+
{
120+
--cnt[i];
121+
++res;
122+
res += dfs(cnt);
123+
++cnt[i];
124+
}
125+
}
126+
return res;
127+
}
128+
};
129+
```
64130

131+
### **Go**
132+
133+
```go
134+
func numTilePossibilities(tiles string) int {
135+
cnt := make([]int, 26)
136+
for _, c := range tiles {
137+
cnt[c-'A']++
138+
}
139+
var dfs func() int
140+
dfs = func() int {
141+
res := 0
142+
for i := 0; i < 26; i++ {
143+
if cnt[i] > 0 {
144+
res++
145+
cnt[i]--
146+
res += dfs()
147+
cnt[i]++
148+
}
149+
}
150+
return res
151+
}
152+
return dfs()
153+
}
65154
```
66155

67156
### **...**

solution/1000-1099/1079.Letter Tile Possibilities/README_EN.md

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,102 @@
4646
### **Python3**
4747

4848
```python
49-
49+
class Solution:
50+
def numTilePossibilities(self, tiles: str) -> int:
51+
def dfs():
52+
ans = 0
53+
for i in range(26):
54+
if cnt[i]:
55+
ans += 1
56+
cnt[i] -= 1
57+
ans += dfs()
58+
cnt[i] += 1
59+
return ans
60+
61+
cnt = [0] * 26
62+
for t in tiles:
63+
cnt[ord(t) - ord('A')] += 1
64+
return dfs()
5065
```
5166

5267
### **Java**
5368

5469
```java
70+
class Solution {
71+
public int numTilePossibilities(String tiles) {
72+
int[] cnt = new int[26];
73+
for (char c : tiles.toCharArray()) {
74+
++cnt[c - 'A'];
75+
}
76+
return dfs(cnt);
77+
}
78+
79+
private int dfs(int[] cnt) {
80+
int res = 0;
81+
for (int i = 0; i < cnt.length; ++i) {
82+
if (cnt[i] > 0) {
83+
++res;
84+
--cnt[i];
85+
res += dfs(cnt);
86+
++cnt[i];
87+
}
88+
}
89+
return res;
90+
}
91+
}
92+
```
93+
94+
### **C++**
95+
96+
```cpp
97+
class Solution {
98+
public:
99+
int numTilePossibilities(string tiles) {
100+
vector<int> cnt(26);
101+
for (char& c : tiles) ++cnt[c - 'A'];
102+
return dfs(cnt);
103+
}
104+
105+
int dfs(vector<int>& cnt) {
106+
int res = 0;
107+
for (int i = 0; i < 26; ++i)
108+
{
109+
if (cnt[i])
110+
{
111+
--cnt[i];
112+
++res;
113+
res += dfs(cnt);
114+
++cnt[i];
115+
}
116+
}
117+
return res;
118+
}
119+
};
120+
```
55121

122+
### **Go**
123+
124+
```go
125+
func numTilePossibilities(tiles string) int {
126+
cnt := make([]int, 26)
127+
for _, c := range tiles {
128+
cnt[c-'A']++
129+
}
130+
var dfs func() int
131+
dfs = func() int {
132+
res := 0
133+
for i := 0; i < 26; i++ {
134+
if cnt[i] > 0 {
135+
res++
136+
cnt[i]--
137+
res += dfs()
138+
cnt[i]++
139+
}
140+
}
141+
return res
142+
}
143+
return dfs()
144+
}
56145
```
57146

58147
### **...**
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
int numTilePossibilities(string tiles) {
4+
vector<int> cnt(26);
5+
for (char& c : tiles) ++cnt[c - 'A'];
6+
return dfs(cnt);
7+
}
8+
9+
int dfs(vector<int>& cnt) {
10+
int res = 0;
11+
for (int i = 0; i < 26; ++i)
12+
{
13+
if (cnt[i])
14+
{
15+
--cnt[i];
16+
++res;
17+
res += dfs(cnt);
18+
++cnt[i];
19+
}
20+
}
21+
return res;
22+
}
23+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func numTilePossibilities(tiles string) int {
2+
cnt := make([]int, 26)
3+
for _, c := range tiles {
4+
cnt[c-'A']++
5+
}
6+
var dfs func() int
7+
dfs = func() int {
8+
res := 0
9+
for i := 0; i < 26; i++ {
10+
if cnt[i] > 0 {
11+
res++
12+
cnt[i]--
13+
res += dfs()
14+
cnt[i]++
15+
}
16+
}
17+
return res
18+
}
19+
return dfs()
20+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def numTilePossibilities(self, tiles: str) -> int:
3+
def dfs():
4+
ans = 0
5+
for i in range(26):
6+
if cnt[i]:
7+
ans += 1
8+
cnt[i] -= 1
9+
ans += dfs()
10+
cnt[i] += 1
11+
return ans
12+
13+
cnt = [0] * 26
14+
for t in tiles:
15+
cnt[ord(t) - ord('A')] += 1
16+
return dfs()

0 commit comments

Comments
 (0)