leecode刷题第五天

leecode刷题第5天


1.今天的第一题是一道合并链表题,题目如下:
在这里插入图片描述
这道题的思路是先判断两个链表的头节点值谁大,如果l1大则将l1的头节点加入到curr中且l1=l1.next,否则将l2的头节点加入到curr中且l2=l2.next,直到l1和l2中有一个为空,最后将不为空的链表直接加入到curr中。代码如下:

class Solution:    
	def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:        
		curr=ListNode()#新建头节点        
		heads=curr        
		while l1!=None and l2!=None:            
			if(l1.val<l2.val):                
				curr.next=l1                
				l1=l1.next            
			else:                
				curr.next=l2                
				l2=l2.next            
			curr=curr.next        
		if l1!=None:            
			curr.next=l1        
		if l2!=None:            
			curr.next=l2                
		return heads.next

2.第二题题目如下:
在这里插入图片描述
这道题的一个最优解是:
首先检查数组是否为空数组
建立一个长度为26的数组,起始值为0
遍历所有字符串,将字母的出现频率放到数组的对应位置里(利用ascii码)
遍历数组,按照相同字母出现频率进行分组归类(使用hashmap)
遍历map,将结果返回
代码如下:

class Solution:    
	def groupAnagrams(self, strs: List[str]) -> List[List[str]]:        
		if len(strs)==0:            
			return []        
		maps={}                
		for stri in strs:            
			characters=[0]*26            
			for i in range(len(stri)):                
				asciii=ord(stri[i])-97#得到对应字母的下标                
				characters[asciii]+=1            
			b=[str(i) for i in characters]            
			key="".join(b)            
			#将对应的键值保存到maps中,增加到对应的列表里方便输出结果
			if (key in maps.keys()):                
				maps[key].append(stri)            
			else:                
				maps[key]=[stri]             
		result=[]      
		for i in maps.keys():            
			result.append(maps[i])        
		return result        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值