# your code goes here
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
matrix = [num for row in matrix for num in row]
def condition(mid):
if matrix[mid] == target:
return "found"
elif matrix[mid] > target:
return 'left'
elif matrix[mid] < target:
return 'right'
def binary_search(lo, hi, condition):
while lo <= hi:
mid = (lo + hi) // 2
result = condition(mid)
if result =='found':
return True
elif result == 'left':
hi = mid - 1
elif result == 'right':
lo = mid + 1
return False
return binary_search(0, len(matrix)-1, condition)
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmNsYXNzIFNvbHV0aW9uKG9iamVjdCk6CiAgICBkZWYgc2VhcmNoTWF0cml4KHNlbGYsIG1hdHJpeCwgdGFyZ2V0KToKICAgICAgICAiIiIKICAgICAgICA6dHlwZSBtYXRyaXg6IExpc3RbTGlzdFtpbnRdXQogICAgICAgIDp0eXBlIHRhcmdldDogaW50CiAgICAgICAgOnJ0eXBlOiBib29sCiAgICAgICAgIiIiCiAgICAgICAgbWF0cml4ID0gW251bSBmb3Igcm93IGluIG1hdHJpeCBmb3IgbnVtIGluIHJvd10KICAgICAgICBkZWYgY29uZGl0aW9uKG1pZCk6CiAgICAgICAgICAgIGlmIG1hdHJpeFttaWRdID09IHRhcmdldDoKICAgICAgICAgICAgICAgIHJldHVybiAiZm91bmQiCiAgICAgICAgICAgIGVsaWYgIG1hdHJpeFttaWRdID4gdGFyZ2V0OgogICAgICAgICAgICAgICAgcmV0dXJuICdsZWZ0JwogICAgICAgICAgICBlbGlmICBtYXRyaXhbbWlkXSA8IHRhcmdldDoKICAgICAgICAgICAgICAgIHJldHVybiAncmlnaHQnCgoKICAgICAgICBkZWYgYmluYXJ5X3NlYXJjaChsbywgaGksIGNvbmRpdGlvbik6CiAgICAgICAgICAgIHdoaWxlIGxvIDw9IGhpOgogICAgICAgICAgICAgICAgbWlkID0gKGxvICsgaGkpIC8vIDIKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbihtaWQpCgogICAgICAgICAgICAgICAgaWYgcmVzdWx0ID09J2ZvdW5kJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAKICAgICAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdsZWZ0JzoKICAgICAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDEKICAgICAgICAgICAgICAgIGVsaWYgcmVzdWx0ID09ICdyaWdodCc6CiAgICAgICAgICAgICAgICAgICAgbG8gPSBtaWQgKyAxCiAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgIAogICAgICAgIHJldHVybiBiaW5hcnlfc2VhcmNoKDAsIGxlbihtYXRyaXgpLTEsIGNvbmRpdGlvbik=