Leetcode刷题记录——初级

目录

1.两数之和

2.两数相加

3.无重复字符的最长子串

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那两个整数,并返回它们的数组下标。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 

完整代码如下: 

def twoSum(nums, target):
    for i in range(len(nums)):
        for j in range(i+1,len(nums)):
            if nums[i] + nums[j] == target:
                return[i,j]
#调用方法
num = input("num = ").split(",")
nums=[int(num[i]) for i in range(len(num))]
target=int(input("target = "))
print(twoSum(nums,target))

#评论区 代码随想录分享方法,速度更快,占用内存更少
def twoSum1(nums, target):
    records = dict()
    # 用枚举更方便,就不需要通过索引再去取当前位置的值
    for idx, val in enumerate(nums):
        if target - val not in records:
            records[val] = idx
        else:
            return [records[target - val], idx] # 如果存在就返回字典记录索引和当前索引

 结果:

2.两数相加

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

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

输出:[7,0,8]

解释:342 + 465 = 807

完整代码如下: 

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class LinkList:
    def __init__(self):
        self.head=None
    def initList(self, data):
        # 创建头结点
        self.head = ListNode(data[0])
        r=self.head
        p = self.head
        # 逐个为 data 内的数据创建结点, 建立链表
        for i in data[1:]:
            node = ListNode(i)
            p.next = node
            p = p.next
        return r
    #链表打印成列表形式
    def LtoL(self,head):
        if head == None: return
        l = []
        linkedNode = head
        while linkedNode:
            l.append(linkedNode.val)
            linkedNode = linkedNode.next
        return l[:: 1]#1是不翻转
        # return l[:: -1]#-1是翻转

class Solution:#注释debug的是第一个例子
    def addTwoNumbers(self, l1, l2):
        l = ListNode(0)
        l3 = l
        carry = 0
        while (l1 or l2):
            #这里必须要有判断,不然当l1为none时,l2有值时就会报错;将none设为0
            l1val = l1.val if l1 else 0
            l2val = l2.val if l2 else 0
            sum = l1val+l2val+carry    #sum=2+8=10;1+3+1=5;9
            carry = sum//10    #carry=1;0;0
            l3.next = ListNode(sum%10)    #l3.value=0;5;9
            l3 = l3.next
            if l1: l1 = l1.next    #1;None
            if l2: l2 = l2.next    #3;9;None
        if(carry>0): l3.next = ListNode(1)
        return l.next    

 
if __name__ == '__main__':
    a = Solution()
    l = LinkList()
    list01 = input("l1=").split(",")
    data1 = [int(list01[i]) for i in range(len(list01))]
    list02 = input("l2=").split(",")
    data2 = [int(list02[i]) for i in range(len(list02))]
    l1 = l.initList(data1)
    l2 = l.initList(data2)
    res3 = a.addTwoNumbers(l1, l2)
    print(l.LtoL(res3))

结果:

 

 参考:

(6条消息) leetcode 2. 两数相加_此生辽阔的博客-CSDN博客

(6条消息) leetcode2.两数相加(思路超详细!!!)_脸圆圆很可爱的博客-CSDN博客_leetcode两数相加

LeetCode 02:“两数相加”,小学加法运算而已? - 知乎 (zhihu.com)

代码参考

(6条消息) Python 链表_菜鸟知识搬运工的博客-CSDN博客_python 链表

(6条消息) python——链表输入输出代码_kuangd_1992的博客-CSDN博客_python如何输入链表

3.无重复字符的最长子串

题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

思路:循环数组,将字符i添加到temp中;

在添加前加判断,如果字符i在临时数组temp中,只保留temp中初诗字符i之后的字符,

代码实现就是找到temp数组中字符i初始索引+1之后的字符存在temp数组中。 

s=input("s=")
def lengthOfLongestSubstring(str):
    temp = []
    long = 0
    for i in str:#i1代表第一次循环。i1:p; i2:w; i3:w; i4:k; i5:e; i6:w
        if i in temp:#i3=w进入循环;i6:w
            temp = temp[temp.index(i)+1:] # i在temp里,只保留i字符初始索引+1之后的字符
            #temp3:[],从temp2.index(w)=1+1=2开始,所以为null; temp6:[k,e],从temp5.index=0+1=1
        temp.append(i)#temp1:[p]; temp2:[p,w]; temp3:[w]; temp4[w,k]; temp5[w,k,e]; temp6[k,e,w]
        if len(temp)<=long:
            long
        else:
            long=len(temp)#long1:1;long2:2;long5:3
    return long
print(lengthOfLongestSubstring(s))

 结果

代码参考:

 3. 无重复字符的最长子串 - 力扣(LeetCode)暴力破解王

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值