Leetcode继续 & 小技能分享

简介: Leetcode继续 & 小技能分享

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

一、写在前面

LeetCode 第十五题存在重复元素传输门:LeetCode015 :存在重复元素

今天给大家分享的是LeetCode 数组与字符串 第十六题: 螺旋矩阵,和 第十七题:螺旋矩阵Ⅱ ,为面试而生,期待你的加入。
另外给大家讲一个Python编程小技能:自动规范代码autopep8的配置使用。
“Use the utility in the API is recommended in the project. But if you use it in an interview, you will definitely fail .”

Part 1

二、今日第一题

给定一个包含 m x n 个元素的矩阵(m 行, n 列),
请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例:

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
输入:
[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

三、 分析

这个题目,看起来比较简单,但是难度还是有的,而且略微有点大,简单的一想,不就是转圈圈吗?从第一个元素开始转圈,每转一圈,圈的半径减小一个,转到遇到重复元素为止,对的,思想就是这样,怎么实现呢?你会吗?看下面老表的思路图解吧~

image.png

基本思路

四、解题

表面上看,时间复杂度:O(n)
空间复杂度:O(n)

(1)代码

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        row = len(matrix)  # 行号
        col = len(matrix[0]) if row > 0 else 0  # 列号
        total = row * col  # 元素个数
        ans = []  # 存储结果
        i = 0
        while len(ans) < total:
            # 向右走,i 不变
            for rightcol in range(i, col - i):
                ans.append(matrix[i][rightcol])
            downrow = -1  # 越界标记
            # 向下走,rightcol 不变
            for downrow in range(i + 1, row - i):
                ans.append(matrix[downrow][rightcol])
            if downrow == -1:
                break
            icol = -1
            # 向左走,downrow 不变
            for icol in range(rightcol - 1, -1 + i, -1):
                ans.append(matrix[downrow][icol])
            if icol == -1:
                break
            # 向上走,icol 不变
            for uprow in range(downrow - 1, i, -1):
                ans.append(matrix[uprow][icol])
            i += 1 # 圈子缩小一格
        return ans

(2)提交结果

image.png

提交结果

测试数据:22组
运行时间:24ms
击败人百分比:99.71%

Part 2

二、今日第二题

给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,
且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

三、 分析

这个题目,和上一个题目刚好是逆过来的,从二维矩阵变成一维,从一维变成二维,相同点是数据都是给定的,思想如下:

image.png

基本思想

四、解题

表面上看,时间复杂度:O(n)
空间复杂度:O(n)

(1)代码

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        ans = [[0] * n for i in range(n)]  # 螺旋矩阵
        total = n * n  # 总元素个数
        i = 0 # 开始下标
        j = 1  # 记录元素值
        while j <= total:
            # 向右走
            for rightcol in range(i, n - i):
                ans[i][rightcol] = j
                j += 1
            downrow = -1 # 越界标记
            # 向下走
            for downrow in range(i + 1, n - i):
                ans[downrow][rightcol] = j
                j += 1
            if downrow == -1:
                break
            icol = -1
            # 向左走
            for icol in range(rightcol - 1, -1 + i, -1):
                ans[downrow][icol] = j
                j += 1
            if icol == -1:
                break
            # 向上走
            for uprow in range(downrow - 1, i, -1):
                ans[uprow][icol] = j
                j += 1
            i += 1 # 圈子减一
        return ans

(2)提交结果

image.png

提交结果

测试数据:20组

运行时间:28ms

击败人百分比:98.21%

五、疑惑

我相信坚持,总会有收获,我不就收获了你们的支持吗!

思想很复杂,
实现很有趣。
只要不放弃,
终有成名日。

                                                            ---《老表打油诗》

Part 3

零、小技能

Python自动规范代码autopep8的配置和使用
(1)模块安装

pip install autopep8

(2)配置到Pyecharm

Pycharm - > File - > Setting - > Tools - > External Tools ,然后输入下面图中的基本内容,为了方便大家,我把基本固定不变的内容直接贴出来:

Program : autopep8

Arguments : --in-place --aggressive --aggressive $FilePath$

Working directory : $FileDir$

Output filters : $FILE_PATH$\:$LINE$\:$COLUMN$\:.*

image.png

基本配置

(3)实际应用

实例源代码

image.png

1.实例代码


运行autopep方法

image.png

2.运行autopep8方法


运行后,仔细观察

image.png

3.运行后,仔细观察


应用起来还是很方便的,配置起来也不难,有助大家代码的可读性和优美性哦。

七、结语

今天分享的东西还比较多,希望大家坚持学习,我始终相信坚持终有所获,加我微信:zs820553471,备注:leetcode,加入专门的leetcode刷题交流群,回复:加群,可以加入简说Python学习交流群。
坚持 and 努力 : 终有所获。

相关文章
|
1天前
|
云安全 人工智能 自然语言处理
|
9天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
649 56
Meta SAM3开源:让图像分割,听懂你的话
|
6天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
319 116
|
5天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
|
21天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
AgentEvolver:让智能体系统学会「自我进化」
AgentEvolver 是一个自进化智能体系统,通过自我任务生成、经验导航与反思归因三大机制,推动AI从“被动执行”迈向“主动学习”。它显著提升强化学习效率,在更少参数下实现更强性能,助力智能体持续自我迭代。开源地址:https://github.com/modelscope/AgentEvolver
440 32
|
4天前
|
弹性计算 人工智能 Cloud Native
阿里云无门槛和有门槛优惠券解析:学生券,满减券,补贴券等优惠券领取与使用介绍
为了回馈用户与助力更多用户节省上云成本,阿里云会经常推出各种优惠券相关的活动,包括无门槛优惠券和有门槛优惠券。本文将详细介绍阿里云无门槛优惠券的领取与使用方式,同时也会概述几种常见的有门槛优惠券,帮助用户更好地利用这些优惠,降低云服务的成本。
272 132

热门文章

最新文章