题目1:
思路:
① 考虑 target-num1=num2 的形式来进行判断
② 用字典来存储nums,k存储num,v存储num的index
③ 使用字典时,并非全部存储完再进行①的判断,而是存一个进行一次判断,这样时间复杂度为N
③ 代码中要先进行判断,再进行字典存num:
如果先存值,那么 if target-num1 in d 进行判断时,num1已经存储到了 d 中,若target为4,num1为2,那么就发生了错误。因此应该判断(target-即将存储进字典的num1)的值即num2,是否已经存在于字典中。在的话,直接返回结果;如果不在,OK将num1及其index存储到字典里
④ 技巧是用到python的 enumerate(List) 枚举函数,for i,num in enumerate(list1) ,可以同时遍历list的值、index
解:
class Solution(object):
def twoSum(self, nums, target):
d={}
for i,num in enumerate(nums):
if target-num in d:
return [i,d[target-num]]
d[num]=i
题目125
思路:
① 将给定的字符串中除了字母数字以外的字符去掉,然后可以用''空字符将过滤后的一段一段的字符串连接起来
② 由于忽略大小写,所以将字符串再统一转换为小写
③ 上面的得到的字符串再与自己的逆序进行比较即可:s==s[::-1]
解:
class Solution:
def isPalindrome(self, s: str) -> bool:
s = ''.join(filter(str.isalnum,s)).lower()
return s==s[::-1]
分析:
① str.join() 将join内的元素用str来进行连接,''为空字符
② filter(xxx,yyy) xxx是判断函数,yyy是xxx的判断对象,函数判断结果为TRUE的话则以List方式返回yyy
③ str.lower() 小写化, str.isalnum 判断str是否为数字字母的组合,isalnum后面有无括号随缘吧。