刷Leetcode算法的第五天

今天是刷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

猜你喜欢

转载自blog.csdn.net/Jiana_Feng/article/details/114938468