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        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章