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        
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读