如何判断指定数字是否存在于矩阵的所有列中?
嘿,这个需求其实很好实现,我来给你拆解思路,再附上几个实用的代码示例,保证你一看就懂~
核心思路拆解
咱们的目标是确认指定数字在矩阵的每一列都至少出现一次,核心逻辑可以拆成这几步:
- 要么把矩阵的「列」转换成「行」(也就是矩阵转置),这样就能像遍历普通行一样遍历每一列;
- 要么直接按列的索引去遍历原矩阵,逐个检查每一列;
- 只有当所有列都包含目标数字时,才返回
True,只要有一列不满足,直接返回False。
Python 实现示例
方法一:用转置+内置函数(简洁高效)
这种方法利用Python的内置特性,代码非常简洁,适合日常开发:
def check_number_in_every_column(matrix, target): # 转置矩阵:zip(*matrix)会把原矩阵的列转成元组,转成列表方便后续操作 transposed_matrix = list(zip(*matrix)) # all()函数会确保所有列都包含目标数字,只要有一列不满足就返回False return all(target in column for column in transposed_matrix) # 测试用例 sample_matrix = [ [1, 2, 3], [4, 5, 1], [7, 1, 9] ] print(check_number_in_every_column(sample_matrix, 1)) # 输出True,每一列都有1 print(check_number_in_every_column(sample_matrix, 2)) # 输出False,第二、三列没有2
方法二:手动按列遍历(适合理解底层逻辑)
如果你想搞清楚底层是怎么运行的,或者不想用转置操作,可以手动遍历每一列的索引:
def check_number_in_every_column(matrix, target): # 先处理空矩阵的边界情况 if not matrix or not matrix[0]: return False total_columns = len(matrix[0]) total_rows = len(matrix) # 遍历每一列的索引 for col_idx in range(total_columns): column_has_target = False # 遍历当前列的每一行 for row_idx in range(total_rows): if matrix[row_idx][col_idx] == target: column_has_target = True break # 找到目标就不用继续遍历当前列了 # 如果当前列没有目标,直接返回False if not column_has_target: return False # 所有列都包含目标,返回True return True # 用同样的测试用例验证 sample_matrix = [ [1, 2, 3], [4, 5, 1], [7, 1, 9] ] print(check_number_in_every_column(sample_matrix, 1)) # True print(check_number_in_every_column(sample_matrix, 2)) # False
额外说明
- 如果你的矩阵是不规则的(比如各行的长度不一样),记得先做边界检查,比如统一列数或者在遍历的时候判断当前行的长度是否大于列索引,避免出现索引越界的错误;
- 这个思路不止适用于Python,换成其他语言逻辑也是一样的:比如JavaScript可以用
map方法转置矩阵,Java可以用嵌套循环按列访问元素,核心都是检查每一列是否包含目标数字。
内容的提问来源于stack exchange,提问作者Chomona
相关产品推荐
相关产品推荐

