Python有序二维矩阵搜索时for循环仅访问第一行问题求解
问题根因
- return语句位置错误,第一行遍历完成后就直接终止了整个函数,具体有两处错误逻辑:
- 处理长度为1的行的分支中,只要当前行没有匹配到目标,就直接执行
return False,直接结束函数,不会进入下一行遍历 - 普通行二分查找结束后没有找到目标时,直接在else分支末尾执行
return False,同样直接终止函数,不会继续遍历后续行
两个分支只要走完第一行,无论是否找到目标都会触发全局返回,所以for循环只会执行i=0的第一轮。
- 处理长度为1的行的分支中,只要当前行没有匹配到目标,就直接执行
修复方案
你需要把未找到目标的返回逻辑移到for循环外部,只有所有行都遍历完成后仍未找到目标,才返回False。同时还有两处可优化的细节:
- 二分查找的右边界应该取当前行
matrix[i]的长度,不要固定取matrix[0],避免各行长度不一致时出现索引错误 - mid值推荐用整数除法
//计算,避免浮点运算的精度问题,比round更稳妥
修复后的代码如下:
def searchMatrix(self, matrix, target) -> bool: m = len(matrix) print(m) for i in range(m): print(i) row_len = len(matrix[i]) if row_len == 1: if matrix[i][0] == target: return True # 没找到不要返回,继续下一行 else: start = 0 end = row_len - 1 while start <= end : mid = (start + end) // 2 if matrix[i][mid] == target: return True elif matrix[i][mid] > target: end = mid - 1 else: start = start + 1 # 所有行都遍历完还没找到,再返回False return False
内容的提问来源于stack exchange,提问作者abid9875
相关产品推荐
相关产品推荐

