今天是刷LT的一天,好好干饭,好好努力,好好加油哦
leetcode题目:
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词,如果不存在最后一个单词,请返回 0
例子:
输入: "Hello World"
输出: 5
这道题比较简单,直接用split()的,分开字符串,再返回最后一个字符的长度
#直接return最后一个单词的长度
def lengthOfLastWord(s:str)->int:
s=s.split() #把每个字符分开
if not s: #如果是空字符,则return 0
return 0
return len(s[-1])
split的用法
s=''
c = s.split()
print(c)
if not c:
#如果是空集,则返回blank
print('blank')
输出:
[]
blank
s='Hello World'
c = s.split()
print(c)
if not c:
print('blank')
输出:
['Hello', 'World']
Leetcode题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
(1) l1 和 l2 均按 非递减顺序 排列
(2)两个链表的节点数目范围是 [0, 50]
例子:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
输入:l1 = [], l2 = []
输出:[]
输入:l1 = [], l2 = [0]
输出:[0]
这里需要理解的是链表的定义以及用法,才能开始解这道题。
单链表
首先,定义节点Node,即是 Item和next,item即储存的value,next先定义为None
class Node:
"""
定义节点Node
"""
def __init__(self,val=0,next=None):
self.val = val
self.next = next
例子:
L = Node('a',Node('b'))
L.next.val
输出:'b'
所以题目的解析python code为:
class Solution:
"""
l1:定义为非递减顺序的链表,l1的val是list的数组,l1的next是None
l2:定义为非递减顺序的链表,l2的val是list的数组,l2的next是None
返回结合重组后的非递减顺序链表
"""
def mergeTwoLists(self, l1, l2):
if l1 is None:
#如果l1是空的,直接返回l2
return l2
elif l2 is None:
#如果l2是空的,直接返回l1
return l1
elif l1.val < l2.val:
#如果l1的value 小于 l2的value
#按顺序来的
l1.next = self.mergeTwoLists(l1.next, l2)
#进入递进函数
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
假设:
L1是 1-> 2 -> 4 -> None
L2是 2 -> 3 -> 4 -> None
而创建L1这样链表和使用方法是:
l1=Node(1,Node(2,Node(4)))
print(l1.val)
print(l1.next.val)
print(l1.next.next.val)
print(l1.next.next.next)
输出:
1
2
4
None
如何理解这段code
对于
L1: 1-> 2 -> 4 -> None
L2: 2 -> 3 -> 4 -> None
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
所以,一开始比较的时候,即L1.val < L2.val 即 1< 2 ,执行这段代码
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
即如下:
L1.next = mergeTwoLists(L1.next, L2) = mergeTwoLists(2, 2)
return L1=1 返回1
继续下去,对于mergeTwoLists(L1=2,L2= 2) 执行
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
即如下:
L2.next = mergeTwoLists(L1, L2.next) = mergeTwoLists(2,3)
return L2 = 2 返回2
继续下去,对于 mergeTwoLists(L1=2, L2=3),执行
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
即如下:
L1.next = mergeTwoLists(L1.next, L2)= mergeTwoLists(4,3)
return L1 = 2 返回 2
继续下去,对于 mergeTwoLists(L1=4,L2=3),执行
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
L2.next = mergeTwoLists(L1, L2.next) = mergeTwoLists(4,4)
return L2 = 3 返回 3
继续下去,对于 mergeTwoLists(L1 =4,L2 = 4),执行
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
L2.next= mergeTwoLists(L1, L2.next) = mergeTwoLists(4,None)
return L2 = 4
继续下去,对于 mergeTwoLists(L1=4,L2=None) ,执行
elif l2 is None:
#如果l2是空的,直接返回l1
return l1
直接return L1 =4
所以最后的结果返回了1,2,2,3,4,4