作者: 千石
支持:点赞、收藏、评论
欢迎各位在评论区交流
前言
本文内容来自我平时学习的一些积累,如有错误,还请指正
在题目实战部分,我将代码实现和代码解释设置在了解题思路的下方,方便各位作为参考刷题
一些话
本文内容来自我平时学习的一些积累,如有错误,还请指正
在题目实战部分,我将代码实现和代码解释设置在了解题思路的下方,方便各位作为参考刷题
题目练习步骤:
- 给自己10分钟,读题并思考解题思路
- 有了思路以后开始写代码,如果在上一步骤中没有思路则停止思考并且看该题题解
- 在看懂题解(暂时没看懂也没关系)的思路后,背诵默写题解,直至能熟练写出来
- 隔一段时间,再次尝试写这道题目
刷题
242. 有效的字母异位词 - 力扣(LeetCode)
题解
题目要求判断两个字符串是否为字母异位词,即两个字符串中的每个字符出现的次数都相同。
我们可以使用一个长度为26的数组来计数每个字母出现的次数,因为题目中已经说明了字符串只包含小写字母。我们首先遍历第一个字符串s,并对每个字符在计数数组中对应的位置加1,然后遍历第二个字符串t,并对每个字符在计数数组中对应的位置减1。如果两个字符串中的字母都一样,则计数数组应该全为0。
最后,我们再次遍历计数数组,如果有任何一个计数器不为0,则两个字符串不是字母异位词。如果计数数组中的所有计数器都为0,则两个字符串是字母异位词。
代码如下:
def isAnagram(s, t):
if len(s) != len(t):
return False
# 创建一个长度为26的数组来计数每个字母出现的次数
count = [0] * 26
for i in range(len(s)):
count[ord(s[i]) - ord('a')] += 1
count[ord(t[i]) - ord('a')] -= 1
# 如果两个字符串中的字母都一样,则计数数组应该全为0
for c in count:
if c != 0:
return False
return True
349. 两个数组的交集 - 力扣(LeetCode)
题目要求求解两个数组的交集,即两个数组中都存在的元素的集合。我们可以使用Python内置的set数据结构来解决这个问题。
我们将其中一个数组转换成set,并遍历另一个数组。如果当前元素在set中出现过,则将其添加到结果集合中。因为交集中的元素不能重复,所以我们使用set来存储结果集合。最后将结果集合转化为列表并返回即可。
代码如下:
def intersection(nums1, nums2):
set1 = set(nums1)
result = set()
for num in nums2:
if num in set1:
result.add(num)
return list(result)
202. 快乐数 - 力扣(LeetCode)
题解
这道题目可以使用哈希表来判断一个数是否重复出现。具体思路如下:
- 初始化一个空集合 seen,用于存储每次计算出来的数字。
- 进入循环,计算当前数的每个数字的平方和。
- 判断计算出来的结果是否等于 1,如果等于 1,则说明该数是快乐数,返回 True;否则执行下一步。
- 判断计算出来的结果是否已经在集合 seen 中出现过,如果是,则说明进入了循环,返回 False;否则将计算出来的结果加入集合 seen 中。
- 不断重复步骤 2-4,直到返回 True 或者 False。
代码如下:
class Solution:
def isHappy(self, n: int) -> bool:
seen = set()
while n not in seen:
seen.add(n)
n = sum(int(i)**2 for i in str(n))
return n == 1