LeetCode刷题(57、58、59、61、62)

本文详细介绍了五个经典的编程算法问题:插入区间、求解字符串中最后一个单词的长度、生成螺旋矩阵、旋转链表以及找到网格中从左上到右下的不同路径数量。每个问题都提供了清晰的题目描述、解决方案思路以及对应的Python源码实现,是学习和提升算法能力的好材料。
摘要由CSDN通过智能技术生成

目录

一、插入区间

1、题目描述

2、题解

3、源码

二、最后一个单词的长度

1、题目描述

2、题解

3、源码

三、螺旋矩阵Ⅱ

1、题目描述

2、题解

3、源码

四、旋转链表

1、题目描述

2、题解

3、源码

五、不同路径

1、题目描述

2、题解

3、源码


一、插入区间

1、题目描述

 

2、题解

3、源码

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        intervals.append(newInterval)
        intervals=sorted(intervals)
        res=[]
        n=len(intervals)
        i=0
        while(i<n):
            left=intervals[i][0]
            right=intervals[i][1]
            while(i<n-1 and intervals[i+1][0]<=right):
                i=i+1
                right=max(intervals[i][1],right)
            res.append([left,right])
            i=i+1
        return res


二、最后一个单词的长度

1、题目描述

 

2、题解

 

3、源码

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        return len(s.split( )[-1])

三、螺旋矩阵Ⅱ

1、题目描述

2、题解

3、源码

class Solution:
    def generateMatrix(self, n: int) -> [[int]]:
        l, r, t, b = 0, n - 1, 0, n - 1
        mat = [[0 for _ in range(n)] for _ in range(n)]
        num, tar = 1, n * n
        while num <= tar:
            for i in range(l, r + 1): # left to right
                mat[t][i] = num
                num += 1
            t += 1
            for i in range(t, b + 1): # top to bottom
                mat[i][r] = num
                num += 1
            r -= 1
            for i in range(r, l - 1, -1): # right to left
                mat[b][i] = num
                num += 1
            b -= 1
            for i in range(b, t - 1, -1): # bottom to top
                mat[i][l] = num
                num += 1
            l += 1
        return mat


四、旋转链表

1、题目描述

 

 

2、题解

3、源码

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        if k == 0 or not head or not head.next: #k为0 或者链表长度为0或1
            return head
        
        n = 1
        cur = head
        while cur.next: #寻找尾结点,并记录链表长度n
            cur = cur.next
            n += 1
        
        add = n - k % n
        if add == n: #当k是n的整数倍,直接返回原链表,不做改动
            return head

        cur.next = head #否则进行首尾相连,形成环
        while add: 
            # 找到新链表的最后一个结点(即原链表的第 (n−1)−(k mod n) 个节点)
            cur = cur.next
            add -= 1
        
        ret = cur.next  #根据找到的新链表最后一个结点的位置,把环断开
        cur.next = None
        return ret



五、不同路径

1、题目描述

2、题解

 

 

3、源码

class Solution(object):
    def uniquePaths(self, m, n):
        d = {}
        def dfs(i, j):
            # 如果(i,j)在缓存中则直接返回
            if (i, j) in d:
                return d[i,j]
            # 到达边界时,返回 1    
            if i == m - 1 or j == n - 1:
                return 1
            # 继续递归调用,往下i+1,往右j+1    
            d[i,j] = dfs(i + 1, j) + dfs(i, j + 1)
            return d[i,j]
        return dfs(0,0)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值