@@ -11,39 +11,36 @@ def maxTrailingZeros(self, grid):
11
11
:type grid: List[List[int]]
12
12
:rtype: int
13
13
"""
14
- def factor (x , lookup ):
15
- if x not in lookup :
16
- cnt = [0 ]* 2
17
- y = x
18
- for i , p in enumerate ([2 , 5 ]):
19
- while y and y % p == 0 :
20
- y //= p
21
- cnt [i ] += 1
22
- lookup [x ] = cnt
23
- return lookup [x ]
14
+ def factor (x ):
15
+ cnt = [0 ]* 2
16
+ y = x
17
+ for i , p in enumerate ([2 , 5 ]):
18
+ while y and y % p == 0 :
19
+ y //= p
20
+ cnt [i ] += 1
21
+ return cnt
24
22
25
23
def add (a , b ):
26
24
return [x + y for x , y in itertools .izip (a , b )]
27
25
28
26
def sub (a , b ):
29
27
return [x - y for x , y in itertools .izip (a , b )]
30
28
31
- lookup = {}
32
29
left = [[None for _ in xrange (len (grid [0 ]))] for _ in xrange (len (grid ))]
33
30
for i in xrange (len (grid )):
34
- left [i ][0 ] = factor (grid [i ][0 ], lookup )
31
+ left [i ][0 ] = factor (grid [i ][0 ])
35
32
for j in xrange (1 , len (grid [0 ])):
36
- left [i ][j ] = add (left [i ][j - 1 ], factor (grid [i ][j ], lookup ))
33
+ left [i ][j ] = add (left [i ][j - 1 ], factor (grid [i ][j ]))
37
34
result = 0
38
35
for j in xrange (len (grid [0 ])):
39
36
total = [0 ]* 2
40
37
for i in xrange (len (grid )):
41
- total = add (total , factor (grid [i ][j ], lookup ))
38
+ total = add (total , factor (grid [i ][j ]))
42
39
up = [0 ]* 2
43
40
for i in xrange (len (grid )):
44
41
right = sub (left [i ][- 1 ], left [i ][j - 1 ] if j else [0 ]* 2 )
45
42
result = max (result , min (add (left [i ][j ], up )), min (add (right , up )))
46
- up = add (up , factor (grid [i ][j ], lookup ))
43
+ up = add (up , factor (grid [i ][j ]))
47
44
down = sub (total , up )
48
45
result = max (result , min (add (left [i ][j ], down )), min (add (right , down )))
49
46
return result
0 commit comments