File tree Expand file tree Collapse file tree 5 files changed +239
-2
lines changed
solution/1000-1099/1079.Letter Tile Possibilities Expand file tree Collapse file tree 5 files changed +239
-2
lines changed Original file line number Diff line number Diff line change 53
53
<!-- 这里可写当前语言的特殊实现逻辑 -->
54
54
55
55
``` 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()
57
72
```
58
73
59
74
### ** Java**
60
75
61
76
<!-- 这里可写当前语言的特殊实现逻辑 -->
62
77
63
78
``` 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
+ ```
64
130
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
+ }
65
154
```
66
155
67
156
### ** ...**
Original file line number Diff line number Diff line change 46
46
### ** Python3**
47
47
48
48
``` 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()
50
65
```
51
66
52
67
### ** Java**
53
68
54
69
``` 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
+ ```
55
121
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
+ }
56
145
```
57
146
58
147
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 ()
You can’t perform that action at this time.
0 commit comments