1.有效的字母异位词
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的 字母异位词
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母
就一个dict可以解决了,只是额外可以用一个数组/list映射
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_cnt = [0] * 26
sum_v = 0
for char in s:
s_cnt[ord(char) - 97] += 1
sum_v += 1
for char in t:
if s_cnt[ord(char) - 97] == 0:
return False
s_cnt[ord(char) - 97] -= 1
sum_v -= 1
return sum_v == 0
2.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
注意:
- 如何计算每个位数上面的数的平方和
- 使用set记录之前的遍历结果,如果存在则意味着有循环
class Solution:
def isHappy(self, n: int) -> bool:
#用一个set储存之前的结果,如果有重复则是无限循环
def compute_square_sum(num):
total = 0
while num:
cur = num % 10
total += cur ** 2
num = num // 10
return total
seen = set()
seen.add(n)
while n != 1:
next_n = compute_square_sum(n)
if next_n in seen:
return False
seen.add(next_n)
n = next_n
return True
3.两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
奇淫技巧之–python sorted的key 用法
如果不用他的话,可以直接构造一个字典进行在排序就行了。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
# 我认为排序 + 双指针可以
index_sort = sorted(range(len(nums)), key=lambda x:nums[x])
left, right = 0, len(nums) - 1
while left < right:
if nums[index_sort[left]] + nums[index_sort[right]] == target:
return [index_sort[left], index_sort[right]]
elif nums[index_sort[left]] + nums[index_sort[right]] > target:
right -= 1
else:
left += 1
return