File tree Expand file tree Collapse file tree 10 files changed +463
-0
lines changed Expand file tree Collapse file tree 10 files changed +463
-0
lines changed Original file line number Diff line number Diff line change @@ -170,6 +170,8 @@ public class Codec {
170
170
171
171
### ** JavaScript**
172
172
173
+ 层序遍历:
174
+
173
175
``` js
174
176
/**
175
177
* Definition for a binary tree node.
@@ -235,6 +237,59 @@ var deserialize = function (data) {
235
237
*/
236
238
```
237
239
240
+ 前序遍历:
241
+
242
+ ``` js
243
+ /**
244
+ * Definition for a binary tree node.
245
+ * function TreeNode(val) {
246
+ * this.val = val;
247
+ * this.left = this.right = null;
248
+ * }
249
+ */
250
+
251
+ /**
252
+ * Encodes a tree to a single string.
253
+ *
254
+ * @param {TreeNode} root
255
+ * @return {string}
256
+ */
257
+ var serialize = function (root ) {
258
+ if (root == null ) {
259
+ return ' #' ;
260
+ }
261
+ const { val , left , right } = root;
262
+ return ` ${ val} ,${ serialize (left)} ,${ serialize (right)} ` ;
263
+ };
264
+
265
+ /**
266
+ * Decodes your encoded data to tree.
267
+ *
268
+ * @param {string} data
269
+ * @return {TreeNode}
270
+ */
271
+ var deserialize = function (data ) {
272
+ const vals = data .split (' ,' );
273
+ let index = 0 ;
274
+ const dfs = () => {
275
+ if (vals[index] == ' #' ) {
276
+ index++ ;
277
+ return null ;
278
+ }
279
+ const res = new TreeNode (vals[index++ ]);
280
+ res .left = dfs ();
281
+ res .right = dfs ();
282
+ return res;
283
+ };
284
+ return dfs ();
285
+ };
286
+
287
+ /**
288
+ * Your functions will be called as such:
289
+ * deserialize(serialize(root));
290
+ */
291
+ ```
292
+
238
293
### ** ...**
239
294
240
295
```
Original file line number Diff line number Diff line change @@ -156,6 +156,60 @@ public:
156
156
};
157
157
```
158
158
159
+ ### ** TypeScript**
160
+
161
+ ``` ts
162
+ function permutation(s : string ): string [] {
163
+ const n = s .length ;
164
+ const cs = s .split (' ' );
165
+ const set = new Set <string >();
166
+ const dfs = (i : number ) => {
167
+ if (i === n ) {
168
+ set .add (cs .join (' ' ));
169
+ return ;
170
+ }
171
+ dfs (i + 1 );
172
+ for (let j = i + 1 ; j < n ; j ++ ) {
173
+ [cs [i ], cs [j ]] = [cs [j ], cs [i ]];
174
+ dfs (i + 1 );
175
+ [cs [i ], cs [j ]] = [cs [j ], cs [i ]];
176
+ }
177
+ };
178
+ dfs (0 );
179
+ return [... set ];
180
+ }
181
+ ```
182
+
183
+ ### ** Rust**
184
+
185
+ ``` rust
186
+ use std :: collections :: HashSet ;
187
+ impl Solution {
188
+ fn dfs (i : usize , cs : & mut Vec <char >, res : & mut Vec <String >) {
189
+ if i == cs . len () {
190
+ res . push (cs . iter (). collect ());
191
+ return ;
192
+ }
193
+ let mut set = HashSet :: new ();
194
+ for j in i .. cs . len () {
195
+ if set . contains (& cs [j ]) {
196
+ continue ;
197
+ }
198
+ set . insert (cs [j ]);
199
+ cs . swap (i , j );
200
+ Self :: dfs (i + 1 , cs , res );
201
+ cs . swap (i , j );
202
+ }
203
+ }
204
+
205
+ pub fn permutation (s : String ) -> Vec <String > {
206
+ let mut res = Vec :: new ();
207
+ Self :: dfs (0 , & mut s . chars (). collect (), & mut res );
208
+ res
209
+ }
210
+ }
211
+ ```
212
+
159
213
### ** ...**
160
214
161
215
```
Original file line number Diff line number Diff line change
1
+ use std:: collections:: HashSet ;
2
+ impl Solution {
3
+ fn dfs ( i : usize , cs : & mut Vec < char > , res : & mut Vec < String > ) {
4
+ if i == cs. len ( ) {
5
+ res. push ( cs. iter ( ) . collect ( ) ) ;
6
+ return ;
7
+ }
8
+ let mut set = HashSet :: new ( ) ;
9
+ for j in i..cs. len ( ) {
10
+ if set. contains ( & cs[ j] ) {
11
+ continue ;
12
+ }
13
+ set. insert ( cs[ j] ) ;
14
+ cs. swap ( i, j) ;
15
+ Self :: dfs ( i + 1 , cs, res) ;
16
+ cs. swap ( i, j) ;
17
+ }
18
+ }
19
+
20
+ pub fn permutation ( s : String ) -> Vec < String > {
21
+ let mut res = Vec :: new ( ) ;
22
+ Self :: dfs ( 0 , & mut s. chars ( ) . collect ( ) , & mut res) ;
23
+ res
24
+ }
25
+ }
Original file line number Diff line number Diff line change
1
+ function permutation ( s : string ) : string [ ] {
2
+ const n = s . length ;
3
+ const cs = s . split ( '' ) ;
4
+ const set = new Set < string > ( ) ;
5
+ const dfs = ( i : number ) => {
6
+ if ( i === n ) {
7
+ set . add ( cs . join ( '' ) ) ;
8
+ return ;
9
+ }
10
+ dfs ( i + 1 ) ;
11
+ for ( let j = i + 1 ; j < n ; j ++ ) {
12
+ [ cs [ i ] , cs [ j ] ] = [ cs [ j ] , cs [ i ] ] ;
13
+ dfs ( i + 1 ) ;
14
+ [ cs [ i ] , cs [ j ] ] = [ cs [ j ] , cs [ i ] ] ;
15
+ }
16
+ } ;
17
+ dfs ( 0 ) ;
18
+ return [ ...set ] ;
19
+ }
Original file line number Diff line number Diff line change @@ -182,6 +182,72 @@ func maxSlidingWindow(nums []int, k int) []int {
182
182
}
183
183
```
184
184
185
+ ### ** TypeScript**
186
+
187
+ ``` ts
188
+ function maxSlidingWindow(nums : number [], k : number ): number [] {
189
+ const n = nums .length ;
190
+ const res = [];
191
+ if (n === 0 || k === 0 ) {
192
+ return res ;
193
+ }
194
+ const queue = [];
195
+ for (let i = 0 ; i < k ; i ++ ) {
196
+ while (queue .length !== 0 && queue [queue .length - 1 ] < nums [i ]) {
197
+ queue .pop ();
198
+ }
199
+ queue .push (nums [i ]);
200
+ }
201
+ res .push (queue [0 ]);
202
+ for (let i = k ; i < n ; i ++ ) {
203
+ if (queue [0 ] === nums [i - k ]) {
204
+ queue .shift ();
205
+ }
206
+ while (queue .length !== 0 && queue [queue .length - 1 ] < nums [i ]) {
207
+ queue .pop ();
208
+ }
209
+ queue .push (nums [i ]);
210
+ res .push (queue [0 ]);
211
+ }
212
+ return res ;
213
+ }
214
+ ```
215
+
216
+ ### ** Rust**
217
+
218
+ ``` rust
219
+ use std :: collections :: VecDeque ;
220
+ impl Solution {
221
+ pub fn max_sliding_window (nums : Vec <i32 >, k : i32 ) -> Vec <i32 > {
222
+ let k = k as usize ;
223
+ let n = nums . len ();
224
+ if n == 0 || k == 0 {
225
+ return Vec :: new ();
226
+ }
227
+ let mut res = vec! [0 ; n - k + 1 ];
228
+ let mut queue = VecDeque :: new ();
229
+ for i in 0 .. k {
230
+ while ! queue . is_empty () && * queue . back (). unwrap () < nums [i ] {
231
+ queue . pop_back ();
232
+ }
233
+ queue . push_back (nums [i ]);
234
+ }
235
+ res [0 ] = queue [0 ];
236
+ for i in k .. n {
237
+ if nums [i - k ] == queue [0 ] {
238
+ queue . pop_front ();
239
+ }
240
+ while ! queue . is_empty () && * queue . back (). unwrap () < nums [i ] {
241
+ queue . pop_back ();
242
+ }
243
+ queue . push_back (nums [i ]);
244
+ res [i - k + 1 ] = queue [0 ];
245
+ }
246
+ res
247
+ }
248
+ }
249
+ ```
250
+
185
251
### ** ...**
186
252
187
253
```
Original file line number Diff line number Diff line change
1
+ use std:: collections:: VecDeque ;
2
+ impl Solution {
3
+ pub fn max_sliding_window ( nums : Vec < i32 > , k : i32 ) -> Vec < i32 > {
4
+ let k = k as usize ;
5
+ let n = nums. len ( ) ;
6
+ if n == 0 || k == 0 {
7
+ return Vec :: new ( ) ;
8
+ }
9
+ let mut res = vec ! [ 0 ; n - k + 1 ] ;
10
+ let mut queue = VecDeque :: new ( ) ;
11
+ for i in 0 ..k {
12
+ while !queue. is_empty ( ) && * queue. back ( ) . unwrap ( ) < nums[ i] {
13
+ queue. pop_back ( ) ;
14
+ }
15
+ queue. push_back ( nums[ i] ) ;
16
+ }
17
+ res[ 0 ] = queue[ 0 ] ;
18
+ for i in k..n {
19
+ if nums[ i - k] == queue[ 0 ] {
20
+ queue. pop_front ( ) ;
21
+ }
22
+ while !queue. is_empty ( ) && * queue. back ( ) . unwrap ( ) < nums[ i] {
23
+ queue. pop_back ( ) ;
24
+ }
25
+ queue. push_back ( nums[ i] ) ;
26
+ res[ i - k + 1 ] = queue[ 0 ] ;
27
+ }
28
+ res
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ function maxSlidingWindow ( nums : number [ ] , k : number ) : number [ ] {
2
+ const n = nums . length ;
3
+ const res = [ ] ;
4
+ if ( n === 0 || k === 0 ) {
5
+ return res ;
6
+ }
7
+ const queue = [ ] ;
8
+ for ( let i = 0 ; i < k ; i ++ ) {
9
+ while ( queue . length !== 0 && queue [ queue . length - 1 ] < nums [ i ] ) {
10
+ queue . pop ( ) ;
11
+ }
12
+ queue . push ( nums [ i ] ) ;
13
+ }
14
+ res . push ( queue [ 0 ] ) ;
15
+ for ( let i = k ; i < n ; i ++ ) {
16
+ if ( queue [ 0 ] === nums [ i - k ] ) {
17
+ queue . shift ( ) ;
18
+ }
19
+ while ( queue . length !== 0 && queue [ queue . length - 1 ] < nums [ i ] ) {
20
+ queue . pop ( ) ;
21
+ }
22
+ queue . push ( nums [ i ] ) ;
23
+ res . push ( queue [ 0 ] ) ;
24
+ }
25
+ return res ;
26
+ }
You can’t perform that action at this time.
0 commit comments