zltzlt 发表于 2020-3-21 20:11:36

Python:每日一题 356

本帖最后由 zltzlt 于 2020-3-22 17:39 编辑

今天的题目:

如果一个矩阵的每一方向由左下到右上的对角线上元素是相同的,那么这个矩阵被叫做完美矩阵。

给定一个 M × N 的矩阵,当它是完美矩阵时返回 True。

示例 1:

输入:
[
,
,

]
输出:True
解释:
在上述矩阵中, 其对角线为:
""、""、""、""、""、""。
各条对角线上的所有元素均相同,因此答案是 True。
示例 2:

输入:
[
,

]
输出:False
解释:对角线 "" 上的元素不同。

{:10_298:}欢迎大家一起答题!{:10_298:}

永恒的蓝色梦想 发表于 2020-3-21 20:18:44

本帖最后由 永恒的蓝色梦想 于 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

永远的渣滓 发表于 2020-3-21 20:22:58

小白,路过学习学习

塔利班 发表于 2020-3-21 20:42:16

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 20:43:45

本帖最后由 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 21:24:50

本帖最后由 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来处理了

wcshds 发表于 2020-3-21 21:34:17

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

TJBEST 发表于 2020-3-21 22:26:05

我临时想到的一个方法,不过和第一个方法我不太清楚 谁更快。就是说不太清楚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

fan1993423 发表于 2020-3-21 22:37:27

这种呢 []是True还是False

fan1993423 发表于 2020-3-21 22:39:17

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

dch_python 发表于 2020-3-22 09:36:51

弱弱的问一下如果要输入矩阵格式的是不是应该先导入Pandas(本人萌新)。。。看到前面回复的鱼油都直接用matrix[][]

suchocolate 发表于 2020-3-22 10:04:50

本帖最后由 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

wuhaowz 发表于 2020-3-22 10:33:29

第一天注册,实在是无法完成此类题目啊

旅途Z 发表于 2020-3-22 10:40:59

本帖最后由 一个账号 于 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

whosyourdaddy 发表于 2020-3-22 10:51:23

def func356(matrix):
    m = len(matrix)
    n = len(matrix)
    for i in range(m-1):
      if matrix[:n-1]!=matrix:
            return False
    return True

永恒的蓝色梦想 发表于 2020-3-22 12:19:53

楼主没有加专辑!@zltzlt

一个账号 发表于 2020-3-22 13:37:42

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

March2615 发表于 2020-3-22 13:58:13

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 14:30:17

本帖最后由 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:31:15

本帖最后由 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:}
页: [1] 2 3
查看完整版本: Python:每日一题 356