1. 判断某个整数是否在二维数组中的python方法:
> 题目给定基本条件:
> 已知在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
> 要求:
> 请完成一个函数的操作,要求输入这样的一个二维数组和一个整数,需要判断数组中是否含有该整数
思路1 :这个题目按照一般的想法就是双层嵌套for语句, 容易出错点分析:
1.数组下标越界 nRow-1,nCol-1 数组中的下标是从0开始的
2.没有考虑到数组为空的情况—考虑特殊情况
3.二维数组[[]]它不为空,它是有一个元素为列表,但列表为空的数组,等价于if colcount == 0:#这里要考虑到二维数组为空的情况,如[[]]
return False
# -*- coding:utf-8 -*- class Solution: # array 二维列表 def Find(self, array, target): if array == [[]]: #等于列表为空的数组 return False nRow = len(array) nCol = len(array[0]) if target < array[0][0] or target > array[nRow-1][nCol-1]: return False else: for i in range(nRow): for j in range(nCol): if target == array[i][j]: return True else: return False if __name__=='__main__': a = Solution() print(a.Find([[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]],7))
思路2:因为每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,首先从行号最小列号最大(右上角)的数开始比较,若目标较小,说明当前遍历的数较大,则使列号减一,减小当前遍历的数;若目标较大,说明当前遍历的数较小,则使行号加一,增大当前遍历的数。当然,也可以从左下角开始遍历。
class Solution:
# array 二维列表
def Find(self, array, target):
# write code here
row = 0
maxrow = len(array) - 1
col = len(array[0]) - 1
while col>=0 and row<= maxrow:
if array[row][col] == target:
return True
elif target > array[row][col]:
row+=1
else :
target < array[row][col]
col-=1
return False
if __name__=='__main__':
a = Solution()
print(a.Find([[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]],7))