一.题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
程序:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
# 左下角
'''
* 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
* 因此从左下角开始查找,当要查找数字比左下角数字大时。右移
* 要查找数字比左下角数字小时,上移
'''
print(len(array))# 我擦嘞,len([[]])=1原来等于1
if array and array[0]:
i = len(array)-1
jmax=len(array[0])
j = 0
flag = False
# for i in range(array.shape[0]):
while (i >= 0 and (i <len(array)) and (j >= 0) and (j < len(array[0]))):
if target == array[i][j]:
flag = True
break
elif target > array[i][j]:
j = j + 1
else:
i = i - 1
'''
if i<0 or j>=len(array[0]):
flag=False
break
'''
return flag
else:
return False
a=Solution()
print(a.Find(16,[[1,2,3],[3,4,6]]))
二. 分析
2.1 二维列表
这里虽然是二维矩阵,但不是numpy的形式,所以求长宽不是shape的形式,仍然是len的形式
行数=len(array),列数=len(array[0])
值得注意的是,len([ [ ]] ),二维空列表的行数为1
2.2 矩阵或者列表为空的判断:
一维列表,比如【1,3,4】
这样你用 if len(list)==0 都可以
判断一个 list 是否为空:
- 传统的方式:
if len(mylist):
# Do something with my list
else:
# The list is empty
- 由于一个空 list 本身等同于 False,所以可以直接:
if mylist:
# Do something with my list
else:
# The list is empty
但是二维列表就有些问题:
最好的方式是这样:
if array and array[0]: #保证了【【】】这种也不会出错