LeetCode--Python解答

LeetCode–Python解答

【1】Two Sum:
给定一个整数组和一个目标值,找出数组中和为目标值的两个数,返回这两个数在数组中的index

示例
给定数组list:num_list=[ 1, 2, 3, 6, 7]
目标值为:5

解答1(最简单的循环方法):

def TwoSum(num_list,target):
    solution_list = []
    for i in range(len(num_list)-1):
        for j in range(i+1,len(num_list)):
            if num_list[i] + num_list[j] == target:
                solution_list.append(i)
                solution_list.append(j)
                return solution_list
def TwoSum(num_list,target):
    solution_list = []
    for i in range(len(num_list)-1):
        if target - num_list[i] in num_list:
                solution_list.append(num_list.index(target - num_list[i]))
                solution_list.append(i)
                solution_list.sort()
                return solution_list

【2】Reverse Integer:
给定一个整数(可以大于零或者小于零),保留原符号的情况下,反向输出这个整数。

示例:
给定:a=-123
返回结果为:-321
给定:b=123
返回结果为:b=321

解答

def ReverseInt(num):
    if num < 0:
        sign = -1
    else:
        sign = 1
    num2str = str(sign*num)
    num2str = num2str[::-1]
    str2num = sign*int(num2str)
    return str2num

【3】Palindrome(判断是否为回文数):
给定一个整数组,如果反向输出这个整数,依然得到原整数,那么这个数就叫做回文数:

示例
给定数a = 12321
反向输出:a_reverse=12321
a = a_reverse,a是回文数

给定数a = 12345
反向输出:a_reverse=54321
a 不等于 a_reverse,a不是回文数

负数不是回文数

解答1:

def isPalindrome(x):
    num = x
    res = 0
    while num>0:
        res = res*10 + num%10
        num = num // 10
    return res == x

【4】无重复最长字符串:
给定一个字符串,找出不含有重复字符的最长子串的长度。

示例
输入: “abcabc”
输出: 3
解释: 无重复字符的最长子串是
“abc”,其长度为 3。

解答1:

def NoRepeatingAlp(in_str):
    max_length = ''
    for i in range(len(in_str)-1):
        new_str = in_str[i]
        j = i
        while j<(len(in_str)-1):
            if in_str[j+1] not in new_str:
                new_str = new_str + in_str[j+1]
                j += 1
            else:
                break
        if len(new_str) > len(max_length):
            max_length = new_str
    print(max_length)

解答2:

def NoRepeatingAlp(in_str):
    solution_str = ''
    for i in range(len(in_str)-1):
        j = i+1
        while j<=(len(in_str)-1):
            if in_str[j] not in in_str[i:j]:
                j += 1
            else:
                break
        if (j-i)>len(solution_str):
            solution_str = in_str[i:j]
    print(solution_str)

解答1

def CompTwo(num_seta,num_setb):
    new_list = []
    i = 0
    j = 0
    a = 0
    b = 0
    while True:
        if num_seta[i]<num_setb[j]:
            new_list.append(num_seta[i])
            if i < len(num_seta)-1:
                i += 1
            a += 1
            print(i)
        elif num_seta[i]==num_setb[j]:
            new_list.append(num_seta[i])
            new_list.append(num_setb[j])
            if i < len(num_seta)-1:
                i += 1
            if j < len(num_setb)-1:
                j += 1
            a += 1
            b += 1
        if num_seta[i]>num_setb[j]:
            new_list.append(num_setb[j])
            if j < len(num_setb)-1:
                j += 1
            b += 1
            print(j)
            print(b)
        if a == len(num_seta):
            new_list.extend(num_setb[j:])
            print(new_list)
            return new_list
        if b == len(num_setb):
            new_list.extend(num_seta[i:])
            print(new_list)
            return new_list


a = [1,3]
b = [2,4]
CompTwo(a,b)

解答2

def CompTwo(num_seta,num_setb):
    new_list = []
    res_a = num_seta
    res_b = num_setb
    while True:
        if res_a[0] < res_b[0]:
            new_list.append(res_a[0])
            res_a.remove(res_a[0])
        elif res_a[0] == res_b[0]:
            new_list.append(res_a[0])
            new_list.append(res_b[0])
            res_a.remove(res_a[0])
            res_b.remove(res_b[0])
        else:
            new_list.append(res_b[0])
            res_b.remove(res_b[0])
        if len(res_a) == 0:
            new_list.extend(res_b)
            print(new_list)
            return new_list
        if len(res_b) == 0:
            new_list.extend(res_a)
            print(new_list)
            return new_list

a = [1,3]
b = [2,4]
CompTwo(a,b)

解答3(无需建立新数组):

def CheckPair(in_str):
    a = [in_str[0],]
    i = 1
    while i < len(in_str):
        a.append(in_str[i])
        if (a[-2] == '(' and a[-1] == ')') \
                or (a[-2] == '[' and a[-1] == ']') \
                or (a[-2] == '{' and a[-1] == '}'):
            a.pop()
            a.pop()
        i = i +1
    print(a)
def CheckPair(in_str):
    while '{}' in in_str or '()' in in_str or '[]' in in_str:
        in_str = in_str.replace('{}','').replace('()','').replace('[]','')
        print(in_str)
    return len(in_str)==0

[21]

def CombTwo(num_list1,num_list2):
    new_list = []
    old_list1 = num_list1
    old_list2 = num_list2
    while True:
        if old_list1[0]<old_list2[0]:
            new_list.append(old_list1[0])
            old_list1.pop(0)
        elif old_list1[0] == old_list2[0]:
            new_list.append(old_list1[0])
            new_list.append(old_list2[0])
            old_list1.pop(0)
            old_list2.pop(0)
        else:
            new_list.append(old_list2[0])
            old_list2.pop(0)
        if len(old_list1) == 0:
            new_list.extend(old_list2)
            print(new_list)
            return new_list
        if len(old_list2) == 0:
            new_list.extend(old_list1)
            print(new_list)
            return new_list

[26]

def NonRepeating(num_list):
    for i in range(len(num_list)-1):
        while num_list[i] in num_list[i+1:]:
            num_list.pop(i)
            print(num_list)
def NonRepeating(num_list):
    lenn = len(num_list)
    for i in range(len(num_list)-1):
        if num_list[i] in num_list[i+1:]:
            lenn = lenn -1
    return lenn

[53]

def MaxSubSum(num_list):
    lenn = len(num_list)
    new_list = []
    maxsubsum = 0
    for i in range(len(num_list)-1):
        for j in range(i+1,len(num_list)):
            print(j)
            if sum(num_list[i:j+1]) > maxsubsum:
                maxsubsum = sum(num_list[i:j+1])
                new_list.clear()
                new_list.extend(num_list[i:j+1])
    if num_list[-1] > maxsubsum:
        maxsubsum = 1
        new_list.clear()
        new_list.append(num_list[-1])

    return new_list
def MaxSubSum(num_list):
    maxlocal = 0
    globalmax = 0
    for i in range(len(num_list)):
        maxlocal = max(maxlocal+num_list[i],num_list[i])
        globalmax = max(globalmax, maxlocal)
    return globalmax

[88]

def CombTwoList(num_list1, num_list2):
    while len(num_list2)>0:
        if num_list2[0]<num_list1[0]:
            num_list1.append(num_list2[0])
            num_list2.pop(0)
        elif num_list2[0] == num_list1[0]:
            num_list1.append(num_list2[0])
            num_list1.append(num_list1[0])
            num_list1.pop(0)
            num_list2.pop(0)
        else:
            num_list1.append(num_list1[0])
            num_list1.pop(0)
            if len(num_list2) == 1:
                num_list1.append(num_list2[0])
                num_list2.pop()

    return num_list1

[101] 对称二叉树

def BinaryTree(num_list):
    length = len(num_list)
    new_list = []
    depth = 0
    j = 0
    while length>0:
        length = length - 2**depth
        depth += 1
    if depth == 1:
        print('True')
        return True
    if length < 0:
        print('False')
        return False
    index_start = 0
    for k in range(2,depth+1):
        index_start += 2**(k-2)
        sublength = 2**(k-1)
        sublength_half = 2**(k-2)
        if num_list[index_start:index_start+sublength_half] != num_list[index_start+sublength-1:index_start+sublength_half-1:-1]:
            print('False')
            return False
    else:
        print('True')
        return True

[136] Single Number

def SingleNumber(num_list):
    for i in range(0,len(num_list)-1):
        if num_list[i] not in num_list[i+1:]:
           a = num_list.pop(i)
           print(num_list)
           return a

[172]

def SingleNumber(num):
    count = 0
    n = num
    while n > 4:
        n = n//5
        count += n
    return count

print(SingleNumber(25))

[283]

def MoveZeros2End(num_list):
    count = 0
    while 0 in num_list:
            num_list.remove(0)
            count += 1
    num_list.extend([0,]*count)
    return num_list

[342]

def MoveZeros2End(num):
    while num > 3:
        num = num//4
    if num == 1:
        print('True')
    else:
        print('False')

[349]

def MoveZeros2End(num_list1,num_list2):
    new_list =[]
    for i in range(len(num_list1)):
        if num_list1[i] in num_list2:
            new_list.append(num_list1[i])
        while num_list1[i] in num_list2:
            num_list2.remove(num_list1[i])
    print(new_list)

[371] Sum of two integers

def MoveZeros2End(a,b):
    list = ['a']*a
    list.extend(['b']*b)
    print(len(list))
    return len(list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值