python3合并两个有序列表 and 加一

python3合并两个有序列表 and 加一

21.合并两个有序列表点此做题

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

在这里插入图片描述

示例 1:

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

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

常规思路:

# 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, l1: ListNode, l2: ListNode) -> ListNode:
        new_list = ListNode(-1,None)
        head = new_list
        while l1 and l2:
            if l1.val<l2.val:
                new_list.next = l1
                new_list=new_list.next
                l1=l1.next
            else:
                new_list.next = l2
                new_list=new_list.next
                l2=l2.next
        if l1:
            new_list.next = l1
        if l2:
            new_list.next = l2
        return head.next

递归思路

if not l1: return l2  # 终止条件,直到两个链表都空
        if not l2: return l1
        if l1.val <= l2.val:  # 递归调用
            l1.next = self.mergeTwoLists(l1.next,l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1,l2.next)
            return l2
  1. 加一
    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:

输入:digits = [0]
输出:[1]

思路1:字符串和整型相互转然后+1,思路简单,但是耗用内存

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        str1 = ''
        lst = []
        for i in digits:
            str1 += str(i)
        str1 = str(int(str1)+1)
        for i in str1:
            lst.append(int(i))
        return lst

在这里插入图片描述
思路2:直接操作;将最后一位加一,然后判断是否需要进位,以及考虑最坏情况

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
		addone = 0
        digits[-1] += 1
        for i in range(len(digits)-1,-1,-1):
            if addone == 1:
                digits[i] += addone
                addone = 0
            if digits[i] == 10:
                digits[i] = 0
                addone = 1
            else:
                return digits
        if digits[0] == 0:
            digits.insert(0, 1)
            return digits 

思路3:

newlst = []
        while digits and digits[-1] == 9:
            digits.pop()
            newlst.append(0)
        if not digits:
            return [1] + newlst
        else:
            digits[-1] += 1
            return digits + newlst

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100090.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个完整的ajax简单案例_Java实例

    一个完整的ajax简单案例_Java实例写在前面的话:用了很久的Asp.NetAjax,也看了段时间的jquery中ajax的应用,但到头来,居然想不起xmlHttpRequest的该如何使用了.以前记的也不怎么清楚,这次

    2022年8月16日
    4
  • ffmpeg h264解码器提取

    ffmpeg h264解码器提取ffmpeg包含了很多的音视频解码器,本文试图通过对ffmpeg的简单分析提取h264解码器.使用ffmpeg解码可以参考ffmpeg源码下的doc/examples/decoding_encoding.c 1.首先设置解码器参数(avcodec_find_decoder(CODEC_ID_H264)将decode函数指针为h264_decoder,即

    2022年6月16日
    36
  • mybatis重拾—部署官方demo

    mybatis重拾—部署官方demo

    2022年1月31日
    60
  • 三极管导通条件与电位关系

    三极管导通条件与电位关系npn管导通条件:Ub>Ue,通常e极接地,即Ue为0V。饱和导通是Ub>Ue(锗0.2V/硅0.7V)pnp管导通条件:Ub0V。饱和导通是Ub

    2022年6月29日
    35
  • vb语言与测量程序设计吕翠华主编课后答案_c程序设计第五版答案第四章

    vb语言与测量程序设计吕翠华主编课后答案_c程序设计第五版答案第四章第一节数据类型VB中提供了以下11中基本的数据类型:一、数值型二、字符串三、日期型1.界面设计2.代码 1 PrivateSubCommand1_Click() 2 Timer1.Enabled=True 3 EndSub 4 5 PrivateSu…

    2022年10月6日
    3
  • 理解dropout

    理解dropout开篇明义,dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。dropout是CNN中防止过拟合提高效果的一个大杀器,但对于其为何有效,却众说纷纭。在下读到两篇代表性的论文,代表两种不同的观点,特此分享给大家。

    2022年4月27日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号