【leetcode】NO.5976 5976. 检查是否每一行每一列都包含全部整数 (Python)
题目: 检查是否每一行每一列都包含全部整数
对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。
给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true ;否则,返回 false 。
思路
- 先构造一个一维数组;
- 获取二维数组的行和列;
- 对行和列进行排序之后和一维升序数组进行比较;
这里重点是怎么获取列数组:
- 首先不能使用类似二维数组下标的形式:
结果不对,因为上面的写法等价于:
a[:][-1]
= a[-1]
方括号的运算顺序先计算最近的,再计算远的,因此得不到一列,而只能得到最后一行;并不得到列;
获取二维数组的列的方法有:
😄 使用功能zip()函数
map(list, zip(*matrix))
zip(*) 将元素进行解包,之后返回的是元组 使用map函数进行list映射;
😄 第二种方法:
for j in range(cnt): b = [i[j] for i in matrix] if sorted(b)==seq:
内部循环遍历行数,外部循环遍历列数;内部循环会选择没一行的第j个组合成一个列表;
😒 排序的一种方法是sorted()
; 或者直接使用set()
这样会默认排好序,从小到大;
这里需要注意不要使用list.sort()
这里排序之后会改变原来列表的值,之后的操作都会发生改变
使用内置的sorted()
会创建一个变量副本,不会改变原来的值
代码:
** Python 版本**
class Solution:
def checkValid(self, matrix: List[List[int]]) -> bool:
# 创建一维
cnt = len(matrix)
ans = list(range(1, cnt+1))
# ans = [i for i in range(cnt+1)]
for i in matrix:
if sorted(i) == ans:
else:
return False
# 处理列
v_m = map(list, zip(*matrix))
for j in v_m:
if sorted(j) == ans:
else:
return False
return True
方法二:
class Solution:
def checkValid(self, matrix: List[List[int]]) -> bool:
cnt = len(matrix)
ans = [i for i in range(1,cnt+1)]
for i in matrix:
if sorted(i)==ans:
continue
else:
return False
for j in range(cnt):
b = [i[j] for i in matrix]
if sorted(b)==ans:
continue
else:
return False
return True
本文来自博客园,作者:jucw,转载请注明原文链接:https://www.cnblogs.com/Jucw/p/15781398.html