-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathequal-sum-grid-partition-ii.py
More file actions
39 lines (37 loc) · 1.41 KB
/
equal-sum-grid-partition-ii.py
File metadata and controls
39 lines (37 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Time: O(m * n)
# Space: O(m * n)
# array, hash table
class Solution(object):
def canPartitionGrid(self, grid):
"""
:type grid: List[List[int]]
:rtype: bool
"""
def check(range1, range2, get):
curr = 0
lookup = set()
begin = -1
for i in range1:
if begin == -1:
begin = i
for j in range2:
curr += get(i, j)
lookup.add(get(i, j))
diff = curr-(total-curr)
if diff == 0:
return True
if i != begin and j != 0:
if diff in lookup:
return True
elif i == begin:
if diff in [get(begin, 0), get(begin, j)]:
return True
else:
if diff in [get(begin, 0), (get(i, 0))]:
return True
return False
total = sum(sum(row) for row in grid)
return check(xrange(len(grid)), xrange(len(grid[0])), lambda i, j: grid[i][j]) or \
check(reversed(xrange(len(grid))), xrange(len(grid[0])), lambda i, j: grid[i][j]) or \
check(xrange(len(grid[0])), xrange(len(grid)), lambda i, j: grid[j][i]) or \
check(reversed(xrange(len(grid[0]))), xrange(len(grid)), lambda i, j: grid[j][i])