代码随想录day06
1.242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
num = [0]*26
for i in s:
num[ord(i)- ord("a")] += 1
for i in t:
num[ord(i) - ord("a")] -= 1
for i in range(26):
if num[i] != 0:
return False
return True
这道题虽然是哈希表的题目,但是用了数组坐标的方法很巧妙的解决了此问题,感谢老师提供的思路,如果在s数组中出现过的话,对应的位置加一,t则减一,这样,如果数组中有任意一位出现0的时候就说明不是有效的字母异位次。
2.349. 两个数组的交集
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
# 创建一个hash表
hash_set = set()
# 将第一个数组的数据放入hash表中
for num in nums1:
hash_set.add(num)
# 创建结果数组
res = []
# 遍历第二个数组
for num in nums2:
# 如果当前数据在hash表中,说明是重复数据
if num in hash_set:
# 添加到结果数组中,并从hash表中删除该数据
res.append(num)
hash_set.remove(num)
# 返回结果数组
return res
3.202 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
输入:n = 2
输出:false
class Solution:
def isHappy(self, n: int) -> bool:
hashmap = set()
while n not in hashmap:
hashmap.add(n)
Sum = 0
while n > 0:
digit = n%10
Sum += digit**2
n = n // 10
n = Sum
if n == 1:
return True
return False
用chatgpt的解法求的,真好用啊这个软件
4.001 两数之和
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 创建字典存储每个数对应的下标
num_dict = {}
# 遍历数组
for i, num in enumerate(nums):
# 如果目标数字与当前数的差值在字典中,说明找到了答案
if target - num in num_dict:
return [num_dict[target - num], i]
# 如果当前数不在字典中,将其加入字典
num_dict[num] = i
忘记了遍历字典的方法了。。。很尴尬,都做了很多遍了,居然不能一下子想到答案,惭愧啊