题目描述:

第一次提交:

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. makefile自动编译

    1.格式:  目标:依赖 规则    规则前有一个tab键 ,缺少tab键出错,使用空格替代也不可以 (1). 例子: 编写makefile 编译 main.c ,fun.c , fun.h test ...

  2. Nginx---系统学习

    **********************************************前言************************************ =============== ...

  3. lct 模版题 bzoj 2002 2049

    很早就有人给我推荐的模版题,然后我最近才刷的(' '    ) 昨天的tree 不知道比他们高到哪里去了,我和他谈笑风生啊! bzoj 2002 弹飞绵羊 重点:这道题的cut和link 由于这道题链 ...

  4. webstorm使用说明

    1.移动光标到的代码块的结尾处(开始处 [ )      ctrl+] 2.移动光标到的代码块的结尾处并选择   ctrl+shift+] 3.ctrl + b: 跳到变量申明处 4.多光标输入:  ...

  5. pandas中读取文件报错

    import pandas as pd fileName = "路径中带有中文/xxx.csv" tf_train = pd.read_csv(fileName) 会提示报错 OS ...

  6. (2)centos7 图形界面

    1.登录 2.先安装MATE可视化桌面 yum groups install "MATE Desktop" 选择y 3.安装X Window System:图形接口 yum gro ...

  7. strlen、strcpy和strcmp源码

    1.不使用库函数实现strcpy #include <assert.h> char *strcpy(char *dst, const char *src) { assert((dst != ...

  8. Collection Lists

    ArrayList LinkedList  Vector 顺序添加 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法. ArrayList  (1)ArrayList是 ...

  9. 【android】获取本机ip地址

    方法是利用网址:http://pv.sohu.com/cityjson?ie=utf-8,返回String类型的ip地址: public static String getNetIp() { Stri ...

  10. 解决 IE6 position:fixed 固定定位问题

    #e_float{ _position:absolute; _bottom:auto; _right:50%; _margin-right:-536px; _top:expression(eval(d ...