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