File tree Expand file tree Collapse file tree 2 files changed +22
-44
lines changed
solution/2100-2199/2147.Number of Ways to Divide a Long Corridor Expand file tree Collapse file tree 2 files changed +22
-44
lines changed Original file line number Diff line number Diff line change 1
1
function numberOfWays ( corridor : string ) : number {
2
- const M : number = 1e9 + 7 ;
3
- const seatNumbers : number [ ] = [ ] ;
4
-
5
- for ( let i = 0 ; i < corridor . length ; i ++ ) {
6
- if ( corridor . charAt ( i ) === 'S' ) {
7
- seatNumbers . push ( i ) ;
2
+ const n = corridor . length ;
3
+ const mod = 10 ** 9 + 7 ;
4
+ const f : number [ ] [ ] = Array . from ( { length : n } , ( ) => Array ( 3 ) . fill ( - 1 ) ) ;
5
+ const dfs = ( i : number , k : number ) : number => {
6
+ if ( i >= n ) {
7
+ return k === 2 ? 1 : 0 ;
8
8
}
9
- }
10
-
11
- if ( seatNumbers . length % 2 !== 0 || seatNumbers . length === 0 ) {
12
- return 0 ;
13
- }
14
-
15
- let result : number = 1 ;
16
-
17
- for ( let i = 2 ; i < seatNumbers . length ; i += 2 ) {
18
- result = ( result * ( seatNumbers [ i ] - seatNumbers [ i - 1 ] ) ) % M ;
19
- }
20
-
21
- return result ;
9
+ if ( f [ i ] [ k ] !== - 1 ) {
10
+ return f [ i ] [ k ] ;
11
+ }
12
+ if ( corridor [ i ] === 'S' ) {
13
+ ++ k ;
14
+ }
15
+ if ( k > 2 ) {
16
+ return ( f [ i ] [ k ] = 0 ) ;
17
+ }
18
+ f [ i ] [ k ] = dfs ( i + 1 , k ) ;
19
+ if ( k === 2 ) {
20
+ f [ i ] [ k ] = ( f [ i ] [ k ] + dfs ( i + 1 , 0 ) ) % mod ;
21
+ }
22
+ return f [ i ] [ k ] ;
23
+ } ;
24
+ return dfs ( 0 , 0 ) ;
22
25
}
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments