File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed
Problems/26-Knight-Dialer Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ function knightDialer ( n : number ) : number {
2
+ let dp : number [ ] [ ] = new Array ( 4 ) . fill ( new Array ( 3 ) ) ;
3
+ const M = 1000000007 ;
4
+ dp = [
5
+ [ 1 , 1 , 1 ] ,
6
+ [ 1 , 1 , 1 ] ,
7
+ [ 1 , 1 , 1 ] ,
8
+ [ 0 , 1 , 0 ] ,
9
+ ] ;
10
+
11
+ for ( let i = 1 ; i < n ; i ++ ) {
12
+ let newDp : number [ ] [ ] ;
13
+ newDp = [
14
+ [
15
+ ( dp [ 2 ] [ 1 ] + dp [ 1 ] [ 2 ] ) % M ,
16
+ ( dp [ 2 ] [ 0 ] + dp [ 2 ] [ 2 ] ) % M ,
17
+ ( dp [ 1 ] [ 0 ] + dp [ 2 ] [ 1 ] ) % M ,
18
+ ] ,
19
+ [
20
+ ( dp [ 0 ] [ 2 ] + dp [ 2 ] [ 2 ] + dp [ 3 ] [ 1 ] ) % M ,
21
+ 0 ,
22
+ ( dp [ 0 ] [ 0 ] + dp [ 2 ] [ 0 ] + dp [ 3 ] [ 1 ] ) % M ,
23
+ ] ,
24
+ [
25
+ ( dp [ 0 ] [ 1 ] + dp [ 1 ] [ 2 ] ) % M ,
26
+ ( dp [ 0 ] [ 0 ] + dp [ 0 ] [ 2 ] ) % M ,
27
+ ( dp [ 1 ] [ 0 ] + dp [ 0 ] [ 1 ] ) % M ,
28
+ ] ,
29
+ [ 0 , ( dp [ 1 ] [ 0 ] + dp [ 1 ] [ 2 ] ) % M , 0 ] ,
30
+ ] ;
31
+ dp = newDp ;
32
+ }
33
+ let res = 0 ;
34
+ for ( let i = 0 ; i < 4 ; i ++ ) {
35
+ for ( let j = 0 ; j < 3 ; j ++ ) {
36
+ res += dp [ i ] [ j ] ;
37
+ }
38
+ }
39
+ return res % 1000000007 ;
40
+ }
You can’t perform that action at this time.
0 commit comments