题目描述:

第一次提交:

class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
j,x = 0,1
l = []
if matrix==[]:
return []
m = len(matrix)
n = len(matrix[0])
while x<=n*m:
for i in range(j,n-j):
l.append(matrix[j][i])
x += 1
for i in range(j+1,m-j):
l.append(matrix[i][n-j-1])
x += 1
if x <= n * m:
for i in range(n-j-2,j-1,-1):
l.append(matrix[m-j-1][i])
x += 1
for i in range(m-j-2,j,-1):
l.append(matrix[i][j])
x += 1
j += 1
return l

另:

class Solution:
def spiralOrder(self, matrix:[[int]]) -> [int]:
if not matrix: return []
l, r, t, b, res = 0, len(matrix[0]) - 1, 0, len(matrix) - 1, []
while True:
for i in range(l, r + 1): res.append(matrix[t][i]) # left to right
t += 1
if t > b: break
for i in range(t, b + 1): res.append(matrix[i][r]) # top to bottom
r -= 1
if l > r: break
for i in range(r, l - 1, -1): res.append(matrix[b][i]) # right to left
b -= 1
if t > b: break
for i in range(b, t - 1, -1): res.append(matrix[i][l]) # bottom to top
l += 1
if l > r: break
return res

笔记:

Python List extend()方法

 Python 列表


描述

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

语法

extend()方法语法:

list.extend(seq)

二、python中sorted和.sorted 、reversed和reverse的注意点

L=[1,2,3,4]
l1=[123,123,23]
if l1.sort() == L.reverse():   #这个判断式是恒等的,因为两个函数的返回值都是None(其实是无返回值)
    print(1)

------------------------------------------------------------

a.sort()是对列表a进行原地修改,而且只能修改列表

而sorted(a)对字符串、列表、元组都能排序,该函数返回一个排序好的列表(都是列表!!)

------------------------------------------------------------

个人感觉reverse没什么diao用、当然原地修改还是要用reverse()的

因为对于字符串、列表、元组来说都可以用a[::-1]来取反

要注意a[::-1]返回的是一个逆转的列表、字符串、元组。并不是对a的原地修改

还有一种方法就是用.sort(reverse=1)来取反

-------------------------------------------------------------

.reverse()无返回值

使用reversed()返回一个迭代器(迭代器的意思是只能通过循环来输出)
a = '321'
b = reversed(a)
print(b)

>>> <reversed object at 0x02E2B090>

显示的是返回了一个迭代器

迭代器用循环输出

for i in b:

  print(i,end =' ')

>>> 1  2 3

为什么会和sorted不同呢

------------------------------------------------------------

用for i in reversed(a):

  print(i)

发现数据输出竖着输出

改一个参数print(i,end=' ')将末尾的换行符\n换成‘ ’这样就不会自动换行了


三、python中zip()与zip(*)的用法解析

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压,为zip的逆过程,可用于矩阵的转置
[(1, 2, 3), (4, 5, 6)]

详见:

https://www.cnblogs.com/waltsmith/p/8029539.html

class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
# 取首行,去除首行后,对矩阵翻转来创建新的矩阵,
# 再递归直到新矩阵为[],退出并将取到的数据返回
ret = []
if matrix == []:
return ret
ret.extend(matrix[0]) # 上侧
new = [reversed(i) for i in matrix[1:]]
if new == []:
return ret
r = self.spiralOrder([i for i in zip(*new)])
ret.extend(r)
return ret

附:矩阵逆时针旋转代码:

matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
new = [reversed(i) for i in matrix[:]]
new = [i for i in zip(*new)]

java通过两次翻转,实现原地旋转

class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for(int i = 0; i<n-1;i++){
for(int j = i+1;j<n;j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
int mid = n>>1;
for(int i = 0;i<n;i++){
for(int j = 0;j<mid;j++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][n -1 - j];
matrix[i][n-1-j] = tmp;
}
}
}
}

另:

class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
while matrix:
res += matrix.pop(0)
matrix = list(zip(*matrix))[::-1]
return res

leetcood学习笔记-54-螺旋矩阵的更多相关文章

  1. leetcood学习笔记-59-螺旋矩阵二

    题目描述: 参考后的提交: class Solution: def generateMatrix(self, n: int): #l = [[0] * n] * n 此创建方法错误 l = [[] f ...

  2. Java实现 LeetCode 54 螺旋矩阵

    54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], ...

  3. 【LeetCode】54. 螺旋矩阵

    54. 螺旋矩阵 知识点:数组: 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 输入:matrix = [[1,2,3],[4,5, ...

  4. leetcode 54. 螺旋矩阵 及 59. 螺旋矩阵 II

    54. 螺旋矩阵 问题描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...

  5. [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. [原创]java WEB学习笔记54:Struts2学习之路---概述,环境的搭建

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Linux下汇编语言学习笔记54 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  8. LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵

    题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, ...

  9. 【DirectX 11学习笔记】世界矩阵的理解-运动合成

    最近在看龙书,写一下自己的学习理解,主要是物体运动的合成. 物体于局部坐标系内构建,每个物体拥有自己的局部坐标系以及相应的顶点矩阵A,并通过世界矩阵变换到唯一的世界坐标系. 物体在某时刻发生了位移和旋 ...

随机推荐

  1. mysql5.7 基于gtid的主从复制

    基本环境 版本 5.7.14 主库ip:192.168.1.100 port:3306 从库ip:102.168.1.101 port:3306 搭建注意事项 主库配置 gtid-mode=on en ...

  2. python使用xlrd读取excel数据

    一.安装xlrd 库的安装我这里就不说了.. 二.读取 excel 前提条件:excel文件名称为 excel_data.xlsx 1.打开excelw 文件 workbook = xlrd.open ...

  3. Qt 【Qlistview + delegate 为item重写个关闭按钮】

    效果图是这样的. 实现的过程是listview + delegate 本身我想是用listwidget + delegate[网上查询到不可实现] 之前也试过在item中添加布局跟控件,但是在点击的时 ...

  4. mysql的数据导出方法

    mysql的数据导出几种方法   从网上找到一些问题是关于如何从MySQL中导出数据,以便用在本地或其它的数据库系统之上:以及 将现有数据导入MySQL数据库中. 数据导出 数据导出主要有以下几种方法 ...

  5. Dubbo---注册中心

    1.Multicast 注册中心 1.1 Multicast 注册中心   不需要启动  任何中心节点,只要广播地址一样,就可以互相发现. 1.2 1.3 配置   2.zookeeper 注册中心( ...

  6. java中文件下载的思路(参考:孤傲苍狼)

    文件下载 文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载 文件下载功能的实现思路: 1.获取要下载的文件的绝对路径 2.获取要下载的文件 ...

  7. 【LeetCode 19】删除链表的倒数第N个节点

    题目链接 [题解] 经典的一道题. 让p1指向链表的第一个元素. 让p2指向链表的第二个元素. 然后让他们俩同时往后移动. 直到p2到达链表的尾巴. 这时p1和p2之间总是隔了n-1个元素. 所以p1 ...

  8. 暴力枚举+扫描线+线段树——cf1194E

    /*思路就是枚举矩形下面那条先,把所有和其交叉的竖线更新进线段树,然后扫描先向上更新,遇到竖线上端点就在线段树里删掉,遇到横线就更新答案*/#include<bits/stdc++.h> ...

  9. Java异常关闭资源的两种方式

    try-catch-finally 常用,在异常关闭时应判断流是否为空 public class CloseableUtils { public static void closeable(Close ...

  10. npm cnpm node yarn

    1.yarn: windows 下需要下载msi文件, 2.npm,node 安装绿色版本 3.cnpm安装:npm install -g cnpm --registry=https://regist ...