当前位置: 首页 > news >正文

力扣21~25题

21题(简单):

分析:

按要求照做就好了,这种链表基本操作适合用c写,python用起来真的很奇怪

python代码:

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:

        if list1 and list2:

            p=ListNode()

            head=p

            while 1:

                if list1==None:

                    p.next=list2

                    break

                elif list2==None:

                    p.next=list1

                    break

                else:

                    if list1.val>list2.val:

                        p.next=list2

                        p=p.next

                        list2=list2.next

                    else:

                        p.next=list1

                        p=p.next

                        list1=list1.next

                   

            return head.next

        else:

            return list1 if list1 else list2

22题(中等)

分析:

这个题明显要用递归才行,如果用循环真不好做,我们每次确定第n位,但是n+1位有2种(或一种情况),这个要丢进数组里面,下一次循环要对数组每一个进行进一步操作,能做但是很麻烦,我们知道循环适合线性的东西,没必要在非线性的情况下使用循环,除非特别需要,东西我觉得还是用着适合的地方好

python代码:

class Solution:

    def generateParenthesis(self, n: int) -> List[str]:

        res=[]

        def backcall_track(s,left,right):

            if left==right:

                if left!=n:

                    s+='('

                    backcall_track(s,left+1,right)

                else:

                    res.append(s)

                    return

            else:

                if left<n:

                    backcall_track(s+'(',left+1,right)

                if right<n:

                    backcall_track(s+')',left , right+1)

        backcall_track('',0,0)

        return res

23题(困难):

分析:

真不配这个难度,因为这个直接暴力求解都行,和第一个(21题)没区别,python没有指针,初始化感觉挺麻烦,你看了我代码就发现,我的head第一个往往都是空,返回head.next,因为我不想浪费空间重新拿创建,所以我更倾向于用它给的空间,这样看起来说实话有点别扭。但是第一个的赋值要在我们弄或者建立索引单独弄也别扭,以后再补上c++的吧

python代码

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:

        p=ListNode()

        res=p

        if len(lists)==0:

            return None

        while 1:

            k=0

            for i in range(len(lists)):

                if lists[k]==None:

                    k=i

               

                if lists[i] and lists[i].val<lists[k].val:

                    k=i

               

            if lists[k]==None:

                break

            print(k)

            p.next=lists[k]

            p=p.next

            lists[k]=lists[k].next

        return res.next if res.next else None

24题:

分析:

链表基础操作

python代码:

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:

        if head==None:

            return None

        p=head

        res=None

        if p.next!=None:

            res=p.next

            q=p.next.next

            p.next.next=p

            p.next=q

        else:

            return head

        while p.next!=None:

            if p.next.next!=None:

                q=p.next.next.next

                p.next.next.next=p.next

                p.next=p.next.next

                p.next.next.next=q

                p=p.next.next

            else:

                break

        return res

题25(困难):

分析:

有意思,但是难度不配困难。思路其实挺清晰,我们知道链表时候插入数据但是不适合查找数据,本题因为要交换k个数据就说明一定要查找数据,因为你不知道要找第几个,而是要传入k,这个时候肯定要寻求数组的帮助,我们定义一个长度为k的数组,每次拿k个,这样我们要哪个就方便了

python代码:

# Definition for singly-linked list.

# class ListNode:

#     def __init__(self, val=0, next=None):

#         self.val = val

#         self.next = next

class Solution:

    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:

        res=ListNode(0,head)

        p=res

        while 1:

            node_list=[]

            flag=1

            q=p

            for i in range(k):

                if q.next==None:

                    flag=0

                    break

                else:

                    q=q.next

                    node_list.append(q)

                    last_node=q.next

            if flag:

                for i in range(k):

                    p.next=node_list[k-i-1]

                    p=p.next

                p.next=last_node

            else:

                break

        return res.next

总结:

我发现我都注释没怎么写过,导致写得时候思路没有特别清晰,所以要开始写注释了


http://www.mrgr.cn/news/46804.html

相关文章:

  • sql模糊关联匹配
  • 全网唯一的工具 苹果手机备忘录全自动导出备份
  • Vmware窗口大小无法改变问题
  • Python AI教程之十五:监督学习之决策树(6)高级算法C5.0决策树算法介绍
  • 简单组合逻辑
  • AI的崛起:它将如何改变IT行业的职业景象?
  • 【数据结构与算法】简单聊聊图数据的存储
  • CeWL | CeWL 使用实例
  • 【Kubernets】通讲CNI(Container Network Interface)容器网络接口实现方案
  • PGMP-04 Program Benefits Management 项目集效益管理
  • snmpwalk使用说明
  • 基于springboot vue3 工商局商家管理系统设计与实现
  • Python对PDF文件页面的旋转和切割
  • 高清解压视频素材下载指南
  • 如何在 Ubuntu VPS 上从 Apache Web 服务器迁移到 Nginx
  • SAP_FI模块-公司间资产转移ABT1N操作
  • 【hot100-java】二叉树的最近公共祖先
  • 酸枣病虫害智能化防控系统的探索与实践,基于YOLOv9全系列【yolov9/t/s/m/c/e】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统
  • Python对PDF文件的合并操作
  • 浏览器动态移动的小球源码分享
  • Ts 工具类型汇总
  • 电层相关 -- 支路板与线路板
  • 系统架构设计师⑧:软件工程-需求工程
  • phpstrom 部署ftp 连接失败 宝塔ftp失败
  • 基于SpringBoot+Vue的Cosplay交流论坛系统
  • Visual Studio 2022 安装和配置 vcpkg