LeetCode中,Python一行代码能干啥?

【力扣算法】【python】矩阵置零 题目描述 编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。 示例1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ] 来源:力扣(LeetCode) 链接:https://leet 阅读详情

导读

都说python语言简洁、集成高效,一行代码往往能实现很多复杂的操作,比如两变量交换、心形输出、打印乘法口诀等等。但这些总归还是不太实用。那么我们换做在LeetCode中,看看用python一行代码都能解决什么问题。

注:以下题目均来自LeetCode。

Lee‍tCod‍e789# 逃脱阻碍者

‍ ‍

你在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。

每一回合,你和阻碍者们*可以*同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。

如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。

当且仅当你有可能成功逃脱时,输出 True。

来源:力扣(LeetCode)789#逃脱阻碍者

题目理解不难,实际上就是判断游戏者是否比所有阻碍者都更接近目的地,当然是在曼哈顿距离下的接近。所以程序实现的核心即是判断一个值比多个值都更小。想到all函数的用法。

1class Solution:
2    def escapeGhosts(self, ghosts: List[List[int]], target: List[int]) -> bool:
3        return all([abs(target[0])+abs(target[1]) < abs(ghost[0]-target[0])+abs(ghost[1]-target[1]) for ghost in ghosts])

关键点:

  • 曼哈顿距离求解

  • 列表推导式求解多个判断结果

  • all函数对多个逻辑结果判断

LeetCode1347# 制造字母异位词

给你两个长度相等的字符串 s 和 t。每一个步骤中,你可以选择将 t 中的 任一字符 替换为 另一个字符。返回使 t 成为 s 的字母异位词的最小步骤数。字母异位词 指字母相同,但排列不同的字符串。  

示例 1: 

输出:s = "bab", t = "aba" 

输出:1

提示:用 'b' 替换 t 中的第一个 'a',t = "bba" 是 s 的一个字母异位词。 

来源:力扣(LeetCode)1347#制造字母异位词的最小步骤数

构造字母异位词,实际上就相当于以字符串s为基础,判断t中有几个和其不重叠的字符个数,考虑用python自带库collections中的计数器Counter实现。

1class Solution:
2    def minSteps(self, s: str, t: str) -> int:
3        return sum((collections.Counter(s) - collections.Counter(t)).values())

关键点:

  • Counter计数器可以实现字符计数功能

  • Counter类减法中,以前者为基数,且仅保留正数部分(即前面没有的而后面独有的,减法不保留)

  • sum求和计数器之差

LeetCode48# 旋转图像

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。 说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 

示例 1: 

给定 matrix =  [ [1,2,3],  

                          [4,5,6],   

                          [7,8,9] ], 

原地旋转输入矩阵,使其变为: [ [7,4,1],  

                                                  [8,5,2],   

                                                  [9,6,3] ] 

来源:力扣(LeetCode)48#旋转图像

图像的旋转相当于是对矩阵先转置再左右翻转,而实现python中转置则必然是用ZIP函数,左右翻转即是对列表逆序。

1class Solution:
2    def rotate(self, matrix: List[List[int]]) -> None:
3        """
4        Do not return anything, modify matrix in-place instead.
5        """
6        matrix[:] = [lyst[::-1] for lyst in zip(*matrix)]

关键点:

  • zip函数对嵌套列表实现"转置"

  • 列表逆序操作

  • 嵌套列表的inplace需要用matrix[:]

LeetCode面试题50# 只出现1次字符

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 

示例: 

s = "abaccdeff" 

返回 "b" 

s = ""  

返回 " " 

来源:力扣(LeetCode)面试题50. 第一个只出现一次的字符

涉及到出现次数,想到用Counter;要求找出第一个出现,而Counter刚好保留出场顺序,再加上必要的条件特判即可。

1class Solution:
2    def firstUniqChar(self, s: str) -> str:
3        return ([k for k, v in collections.Counter(s).items() if v==1]+[' '])[0]

关键点:

  • Counter实现计数,并保留字符先后顺序

  • 列表推导式筛选仅出现1次字符

  • 加一个空格字符列表避免结果为空

  • 输出第一个结果

LeetCode面试题58# 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。  

示例 1: 

输入: s = "abcdefg", k = 2 

输出: "cdefgab" 

来源:力扣(LeetCode)面试题58 - II. 左旋转字符串

提到旋转,可以想到用collections模块中deque的rotate接口(参考Python内置容器),但那个是inplace操作。直接对原字符串拼接,再从旋转后目标位置截取相应长度。

1class Solution:
2    def reverseLeftWords(self, s: str, n: int) -> str:
3        return (s+s)[n:n+len(s)]

关键点:

  • 字符串拼接实现扩展

  • 左旋n个相当于起始索引右移到n

LeetCode914# 卡牌分组

给定一副牌,每张牌上都写着一个整数。此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:每组都有 X 张牌。组内所有的牌上都写着相同的整数。仅当你可选的 X >= 2 时返回 true。  

示例 1: 

输入:[1,2,3,4,4,3,2,1] 

输出:true

解释:可行的分组是 [1,1],[2,2],[3,3],[4,4] 

来源:力扣(LeetCode)914. 卡牌分组

本题还是比较难想的,需要数学知识作为支撑。因为要求相同的数字分为一组而且还要统计不同计数间能否存在共同的分组大小,用counter;目标是求可能分组大小越大越好,实际上是要找最大公约数;有N个数字的计数那么就是N个计数的最大公约数。

1class Solution:
2    def hasGroupsSizeX(self, deck: List[int]) -> bool:
3        import functools
4        return functools.reduce(math.gcd, collections.Counter(deck).values()) > 1

关键点:

  • counter实现计数

  • math.gcd实现求解最大公约数

  • reduce对列表中两两求解最大公约数


强大的内置库、简洁的python语言!


● 80%的人都不知道,全球Python库下载前10名

● 我珍藏的一些好的Python代码,技巧|上篇

● 爬取300本Python书籍,用Python告诉你哪家强?

● 简单几步,100行代码用Python画一个蝙蝠侠的logo

● 我用Python分析了《青春有你2》109位漂亮小姐姐,真香!

点击阅读原文,原创400篇干货文章

Leetcode top100题目及解答代码Python 代码 代码放置在github中:https://github.com/isthegoal/leetcode_top125 使用了大量注释进行了题目 方案的解读。(类似形式如下) 题目 1 两数之和 42.20% Easy 2 两数相加 30.70% Medium 3 无重复字符的最长子串 28.00% Medium 4 寻找两个有序数组的中位数 25.60% ... 阅读详情

相关推荐

LeetCode编程挑战:Python解题指南

本文还有配套的精品资源,点击获取 简介:通过解决LeetCode上的编程题目,提升Python编程技能。掌握Python基础语法,了解算法与数据结构,利用Python内置模块,优化解决方案的效率,编写单元测试,实现代码复用和模块化,使用版本控制,阅读他人代码,博客分享解题经验,持续学习和实践。 1. Python基础语法和leetcode入门 1.1 Pyt...

weixin_35756637的博客 1261

LeetCode是干嘛的

不同的公司对力扣的水平有不同的要求,一般来说,刷完力扣的medium难度题可以应对大部分公司的面试,而刷完hard难度题则可以帮助应对国内外一线公司的面试。因此,无论是对于正在求职的程序员,还是希望提升自己技术水平的在职人员,力扣都是一个宝贵的资源和工具。:力扣拥有庞大的题目库,涵盖了各种类型的算法和数据结构问题,从简单到复杂,适合不同水平的程序员挑战自我。综上所述,力扣是一个全面而高效的平台,通过提供丰富的编程题目、讨论区等功能,帮助程序员提升编程技能,增强解决问题的能力,并助力职业发展。

伴随着你 3719

leetcode 代码1-30题 纯python

1-30题的答案 后续答案我继续写再上传 有的代码自己不会 是参考别人的代码,其中缺了10题,20题与30题 没找到合适的python代码,等我自己写好 或者找到别人可用的,再重新上传

LeetCode刷题python详解

LeetCode刷题 最近想要练一练代码能力,得知LeetCode这个网站挺不错的,所以便开始刷题。 LeetCode中国网址 在这里主要就是练习一下python,其它编程语言可能基本不会涉及到。 从最简单的开始题——两数相加开始。 先附带一下题目: 首先是最简单也是最容易想到的解法: class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :

w0714的博客 1万+

LeetCode 的主要功能

文章目录LeetCode 简介LeetCode 的题库功能LeetCode 的题库列表题目难度题目标签执行和提交评论和题解LeetCode 的其他功能学习讨论竞赛周赛和双周赛季赛求职在线面试 LeetCode 简介 力扣 (LeetCode) 是定位为求职的做题网站,题库以算法题为主。LeetCode 的题目数量众多,而且在持续增加新题。 除了题库以外,LeetCode 还有学习、讨论、竞赛等功能。 LeetCode 的题库功能 LeetCode 的题库列表 LeetCode 的题库以算法题为主。除了算法题

stormsunshine的博客 3660

Leetcode刷题技巧总结篇(python版)

持续更新…… 1 求字符差值 python不可以直接进行字符减运算。当需要进行字符之间的减运算时,我们可以用ord()函数。ord()是python自带的函数,无需导入。 2 字符串反转 string='leetcode' print(string[::-1]) 3 数组元素计数 import collections li=[1,2,2,4,5,5] cnt = collections.Counter(li) print(cnt) 4 字典遍历 cnt={1:4,2:3} # 遍历键值对 for

杂文集 1万+

LeetCode中,python一行代码能干啥?

导读都说python语言简洁、集成高效,一行代码往往能实现很多复杂的操作,比如两变量交换、心形输出、打印乘法口诀等等。但这些总归还是不太实用。那么我们换做在LeetCode中,看看用py...

小数志 255

PythonCode】力扣Leetcode26~30题Python

力扣26-30

weixin_43790276的博客 1741

PythonCode】力扣Leetcode31~35题Python

力扣31-35

weixin_43790276的博客 1832

PythonCode】力扣Leetcode6~10题Python

Leetcode6-10

weixin_43790276的博客 1807

PythonCode】力扣Leetcode46~50题Python

力扣46-50

weixin_43790276的博客 1464

PythonCode】力扣Leetcode21~25题Python

Leetcode20-25

weixin_43790276的博客 1578

array python 交集_Python练手:一行PythonLeetcode习题

一行PythonLeetcode习题语法简单,提供大量开箱即用的工具是Python语言的一大特点,也是其受欢迎的重要特点。所谓“人生苦短,我用Python”,并不是说Python比其他语言性能好、也不是说Python比其它语言优秀,而是说它方便,易用,可用于思路验证、原型实现,也可用于快速开发;其开发效率高的特点使其的网络编程、爬虫和数据开发领域极受欢迎。知乎上甚至有专门的话题讨论一行Pytho...

weixin_39642998的博客 125

力扣LeetCodePython3代码解析 — 1.两数之和

力扣LeetCodePython解题 — 1.两数之和两数之和解法一:双循环解法二:缓存数值结果对比 两数之和 难度:简单 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解法一:双

Senimo 729

PythonCode】力扣Leetcode36~40题Python

力扣36-40

weixin_43790276的博客 1062

PythonCode】力扣Leetcode16~20题Python

Leetcode16-20

weixin_43790276的博客 1641

Python爬虫抓取LeetCode题解,获取力扣中国(leetcode-cn.com)提交代码,自动保存submission到本地,同步上传到github

力扣中国虽然可以和github绑定账号,但是我提交的题解并不能同步到github上…… 辛辛苦苦三个月,勤勤恳恳四百题,leetcode一片绿,github万里白。 手动上传是不可能手动上传的,这辈子也懒得手动上传。 找了一圈只能找到 Leetcode 的提交爬虫,没有力扣中国的,所以只能自己造轮子了。 学了两天爬虫鼓捣了这么个东西出来,我用的蛮顺手的,希望你们也能用的顺手。 项目地址:...

Keep Coding 5656
上一篇: 315道Python面试题,欢迎挑战
下一篇: Pandas进阶修炼,先来20道题热身再说!
菜鸟学Python
博客等级 码龄9年 7561粉丝 571原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值