Python:每日一题 356
本帖最后由 zltzlt 于 2020-3-22 17:39 编辑今天的题目:
如果一个矩阵的每一方向由左下到右上的对角线上元素是相同的,那么这个矩阵被叫做完美矩阵。
给定一个 M × N 的矩阵,当它是完美矩阵时返回 True。
示例 1:
输入:
[
,
,
]
输出:True
解释:
在上述矩阵中, 其对角线为:
""、""、""、""、""、""。
各条对角线上的所有元素均相同,因此答案是 True。
示例 2:
输入:
[
,
]
输出:False
解释:对角线 "" 上的元素不同。
{:10_298:}欢迎大家一起答题!{:10_298:} 本帖最后由 永恒的蓝色梦想 于 2020-3-21 20:28 编辑
class Solution:
def isToeplitzMatrix(self, matrix: List]) -> bool:
matrix=matrix.__iter__()
last=matrix.__next__()
for row in matrix:
if row!=last[:-1]:
return False
last=row
return True 小白,路过学习学习 def f356(x):
if x:
for i in range(len(x)-1):
if x[:-1]!=x:
return False
return True
return False 本帖最后由 TJBEST 于 2020-3-21 21:47 编辑
def fun356(arr):
M = len(arr)
N = len(arr)
if M < N:
for i in range(0,N-M+1):
head = arr
for x in range(1,M):
if head != arr:
return False
for i in range(N-M+1,N):
head = arr
for x in range(1,N-i):
if head != arr:
return False
for j in range(1,M):
head = arr
for y in range(1,M-j):
if head != arr:
return False
else:
for j in range(0,M-N+1):
head = arr
for y in range(1,N):
if head != arr:
return False
for j in range(M-N+1,M):
head = arr
for y in range(1,M-j):
if head != arr:
return False
for i in range(1,N):
head = arr
for x in range(1,N-i):
if head != arr:
return False
return True 本帖最后由 flamezyy 于 2020-3-21 23:17 编辑
def f356(matrix):
n = len(matrix)
m = len(matrix)
if m == 1:
if n == 1:
return True
else:
return False
elif n == 1:
return False
else:
for t in range(m - 1):
if matrix[:n - 1] == matrix:
continue
else:
return False
else:
return True
不确定[]和[,]这种怎么算,就当是False来处理了 def test(lista):
for index in range(length := len(lista)):
s = 1
num = index + 1
if index + 1 == length:
return True
while s < length:
if lista[:-s] != lista:
return False
s += 1
num += 1
if num == length:
break 我临时想到的一个方法,不过和第一个方法我不太清楚 谁更快。就是说不太清楚python的序列相等运算内部如何实现,知道了可能会好很多
def fun356(arr):,
M = len(arr)
head = arr
for i in range(1,M):
temp = arr
if temp != head[:-1]:
return False
else:
head = temp
return True 这种呢 []是True还是False
def fun356(lst):
if len(lst)==1 or len(lst)==1:
return False
for i in range(len(lst)-1):
if lst[:-1]!=lst:
return False
return True 弱弱的问一下如果要输入矩阵格式的是不是应该先导入Pandas(本人萌新)。。。看到前面回复的鱼油都直接用matrix[][] 本帖最后由 suchocolate 于 2020-3-22 21:14 编辑
def fun356(ls):
for x in range(1, len(ls)):
for y in range(1, len(ls)):
if ls != ls:
return False
return True
解题思路:
1.实际要循环的只有绿色区
https://xxx.ilovefishc.com/album/202003/22/100049j4audulueweq4dnn.png
2.循环时只对比上一行前移一个元素
https://xxx.ilovefishc.com/album/202003/22/100030o825qkez2x6kuc22.png
https://xxx.ilovefishc.com/album/202003/22/100027ca6sbcysabdpkt3c.png
https://xxx.ilovefishc.com/album/202003/22/100026j8ejntitjnqr8eh6.png 第一天注册,实在是无法完成此类题目啊 本帖最后由 一个账号 于 2020-3-22 13:41 编辑
import numpy as np
def is_same(one_dimension_array):
for i in range(len(one_dimension_array)-1):
if one_dimension_array != one_dimension_array:
return False
else:
return True
def perfect_mat(array):
for index in range(-len(array)+1, len(array)-1):
if not is_same(np.diag(array, index)):
return False
else:
return True
def func356(matrix):
m = len(matrix)
n = len(matrix)
for i in range(m-1):
if matrix[:n-1]!=matrix:
return False
return True 楼主没有加专辑!@zltzlt def func(arr):
arr.reverse()
num = 0
index = 0
list1 = []
while num < len(arr)+len(arr)-1:
for i in range(num, -1, -1):
if i >= len(arr):
index += 1
continue
if index >= len(arr):
break
list1.append(arr)
index += 1
if len(set(list1)) != 1:
return False
index = 0
num += 1
list1 = []
return True def daily356(matrix: list) -> bool:
# 判断第i行的前len(num)-1个和第i+1行的后len(num)-1个是否相同
for i in range(len(matrix) - 1):# 最后一行不进行判断
if matrix[:-1] != matrix \
or len(matrix) != len(matrix):
return False
return True
if __name__ == '__main__':
num1 = [
,
,
]
num2 = [
,
]
print(daily356(num1))
print(daily356(num2))
本帖最后由 kinkon 于 2020-3-22 15:03 编辑
先来暴力的吧
def f356(arr):
M, N = len(arr), len(arr)
if M == 1 or N == 1:return True
for i in range(1, M):
for j in range(1, N):
if arr != arr:
return False
return True
def p356(arr):
M, N = len(arr), len(arr)
if M == 1 or N == 1:return True
for i in range(1, M):
if arr[:-1] != arr:
return False
return True 本帖最后由 mdphd 于 2020-3-22 14:34 编辑
a = [,
,
,
]
def f356(a):
if len(a) <= len(a):
b = a
else:
def transformMatrix(m):
r = [[] for i in m]
for ele in m:
for i in range(len(ele)):
r.append(ele)
return r
b = transformMatrix(a)
M, N = len(b), len(b)
c = 1
for i in range(1, M - 1):
for j in range(1, i + 1):
if b != b:
c = 0
break
if c == 0:
print("False")
break
if c == 1:
for i in range(M - 1, N):
for j in range(1, M):
if b != b:
c = 0
break
if c == 0:
print("False")
break
if c == 1:
for i in range(1, M - 1):
for j in range(1, M - i):
if b != b:
c = 0
break
if c == 0:
print("False")
break
if c == 1:
print("True")
f356(a)
没仔细想,这个方法很差,前面的大佬确实厉害!{:10_275:}