python练习题

以下例题属于力扣题库原题,感兴趣的自行搜索练手。

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

练习一、字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。转换为整数相乘,没有思考的意义。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

python 复制代码
class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        sum1 = 0
        sum2 = 0
        count1 = 1
        count2 = 1
        for i in num1:
            sum1 += int(i)*(10**(len(num1)-count1))
            count1 += 1
        for i in num2:
            sum2 += int(i)*(10**(len(num2)-count2))
            count2 += 1
        c = sum1*sum2
        return str(c)

练习二、合并两个链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

输入:l1 = [1,2,4], l2 = [1,3,4]

输出:[1,1,2,3,4,4]

python 复制代码
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        dumy = ListNode()
        curry = dumy
        while list1 and list2 :
            if list1.val < list2.val:
                curry.next = list1
                list1 = list1.next
            else:
                curry.next = list2
                list2 = list2.next
            curry = curry.next
        curry.next = list1 if list1 else list2
        return dumy.next

练习三、反转列表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

输入:head = [1,2,3,4,5]

输出:[5,4,3,2,1]

迭代方法

python 复制代码
Class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        current = head           #头节点
        pre = None               #头节点前
        while(current):          #循环条件
            temp = current.next  #提前保存
            current.next = pre   #改变指向方向
            pre = current        #指针前移
            current = temp       #指针前移
        return pre               #返回新的头节点

练习四、寻找三角形最大周长

给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

示例 1:

输入:nums = [2,1,2]

输出:5

解释:你可以用三个边长组成一个三角形:1 2 2。

python 复制代码
class Solution:
    def largestPerimeter(self, nums: List[int]) -> int:     
        nums.sort(reverse=True)               #降序排序
        for i in range(0,len(nums)-2):        #控制边界
            if nums[i] < nums[i+1]+nums[i+2]:
                return(nums[i]+nums[i+1]+nums[i+2])
        return 0

排序,直接从最大值入手,以免大数据超时。排序后不用担心漏值。如果取三个排好大小的数,后面小的两个数小于大的数,那么后面不可能有两个数大于这个大的数。,一旦满足大条件,找到的即最大周长。

练习五、向字符串添加空格

给你一个下标从 0 开始的字符串 s ,以及一个下标从 0 开始的整数数组 spaces 。

数组 spaces 描述原字符串中需要添加空格的下标。每个空格都应该插入到给定索引处的字符值 之前 。

例如,s = "EnjoyYourCoffee" 且 spaces = [5, 9] ,那么我们需要在 'Y' 和 'C' 之前添加空格,这两个字符分别位于下标 5 和下标 9 。因此,最终得到 "Enjoy Your Coffee" 。

请你添加空格,并返回修改后的字符串

输入:s = "LeetcodeHelpsMeLearn", spaces = [8,13,15]

输出:"Leetcode Helps Me Learn"

解释:

下标 8、13 和 15 对应 "LeetcodeHelpsMeLearn" 中加粗斜体字符。

接着在这些字符前添加空格。

python 复制代码
class Solution:
    def addSpaces(self, s: str, spaces: List[int]) -> str:
            lis = []
            pre = 0
            for i in spaces:
                lis.append(s[pre:i])
                pre = i 
            lis.append(s[pre:])
            s = ' '.join(lis)
            return s

建议切片连接,不然大数据时间复杂度太高。

相关推荐
ChiaWei Lee3 分钟前
【C语言】深入理解指针(三):C语言中的高级指针应用
c语言·开发语言
最后一个bug3 分钟前
教你快速理解linux中的NUMA节点探测是干什么用的?
linux·c语言·开发语言·arm开发·嵌入式硬件
Tadecanlan20 分钟前
[C++面试] 智能指针面试点(重点)续4
开发语言·c++·面试
创新技术阁21 分钟前
FastAPI 的两大核心组件:Starlette 和 Pydantic 详解
后端·python
关山月23 分钟前
被低估的服务器发送事件(SSE)
python
快乐点吧31 分钟前
【Word】批注一键导出:VBA 宏
开发语言·c#·word
DeepLink41 分钟前
Python小练习系列:学生信息排序(sorted + key函数)
python·求职
项目申报小狂人1 小时前
CUDA详细安装及环境配置——环境配置指南 – CUDA+cuDNN+PyTorch 安装
人工智能·pytorch·python
胡乱儿起个名1 小时前
C++的指针数组、数组指针和指针数组指针
开发语言·c++
kill bert1 小时前
第32周Java微服务入门 微服务基础
java·开发语言·微服务