在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
我觉得我自己的想法有点奇葩,用了递归,角度蜜汁奇怪。我选择从右下角开始比较,如果比target小,那么就要分三部分考量一下(一行,一列,一个矩阵),对行列直接遍历查找(二分更快吧,但我比较懒…),对矩阵递归。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
m = len(array)
n = len(array[0])
if m and n:
if array[m - 1][n - 1] == target:
return True
elif array[m - 1][n - 1] > target:
for i in range(n):
if array[m - 1][i] == target:
return True
for j in range(m):
if array[j][n - 1] == target:
return True
if m > 1 and n > 1:
s = Solution()
return s.Find(target, [[array[l][k] for k in range(n - 1)] for l in range(m - 1)])
else:
return False
else:
return False
道行还是太浅呐,还是贴点更好的解法。
矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
因此从左下角开始查找,当target比左下角数字大时,右移,比左下角数字小时,上移。
(右上角类似)
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
rows = len(array) - 1
cols= len(array[0]) - 1
i = rows
j = 0
while j <= cols and i >= 0:
if target < array[i][j]:
i -= 1
elif target > array[i][j]:
j += 1
else:
return True
return False