我是靠谱客的博主 花痴麦片,最近开发中收集的这篇文章主要介绍leetcode第1题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解:

def sum_nums(Nums,Target):
    '''说明文档是个好习惯,一定记得写'''
    for i in range(len(Nums)):
        for j in range(i,len(Nums)):
            sum_ij=Nums[i]+Nums[j]
            if sum_ij==Target:
                return [i,j]

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    print_hi('PyCharm')
nums=[2, 7, 11, 15]
target=9
print (sum_nums(nums,target))

return可以返回两个值,比如return i,j

enumerate(sequence, [start=0]):

示例:

>>> nums=[2, 7, 11, 15]
>>> for i,j in enumerate(nums):
	print(i,j)

	
(0, 2)
(1, 7)
(2, 11)
(3, 15)

思路2:hashmap,记录下所有的和与对应的下角标,下角标为key,和为value,代码实现晚上补

2.

def input2list(ipt):
    '''读输入去掉括号,输出字符列表'''
    int_ipt=('1,2,3,4,5,6,7,8,9,0')
    str_ipt=[]
    for char_ipt in range(len(ipt)):
        if ipt[char_ipt] in int_ipt or ipt[char_ipt]=='+':
            str_ipt.append(ipt[char_ipt])
        else:
            pass
    return str_ipt
def list_div(list_AB):
    '''找到‘+’返回下标,使用list切片'''
    for i in range(len(list_AB)):
        if list_AB[i]=='+':
            return i
def div(list_AB,i):
    '''切片'''
    A=list_AB[0:i]
    B=list_AB[i+1:]
    return A,B
def list2int(ipt2int):
    '''先读出两个列表然后作为参数输入函数,转换成int输出'''
    s=0
    d={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    for i in ipt2int:
       s=s*10+d[i]
    return s
def flip(list_FLP):
    '''翻转list,是不是只有list可以用这个格式迭代来着list.reverse()???str也能用切片和步长来迭代?'''
    return list_FLP[::-1]
ipt=raw_input()
str_test=input2list(ipt)
str_FLP=flip(str_test)
i=list_div(str_FLP)
A,B=div(str_FLP,i)
sum_AB=list2int(A)+list2int(B)
print (flip(str(sum_AB)))

害!果然就是题目不一样不过还是把这个放进去吧

class Solution(object):

    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        def str2int(l_s2i):
            # dict_s2i={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
            s = 0
            for i in l_s2i:
                s = s * 10 + i
            return s
        print (l1[::-1])
        return str2int(l1[::-1])+str2int(l2[::-1])
s=Solution()
l1 = [2,4,3]
l2 = [5,6,4]
s.addTwoNumbers(l1,l2))

真正的原题:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """

好家伙,用python手写单链表ADT

def log(func):
    def wrap(*args,**kw):
        print ("call %s"%func.__name__)
        return func(*args,**kw)
    return wrap
@log
class ListNode(object):
    '''实现单链表'''
    @log
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    @log
    def append(self,val):
        '''实现append方法'''
        while self.next!=None:
            self=self.next
        new_LN = ListNode(val)
        self.next = new_LN
        #return new_LN
    @log
    def travel(self):
        '''实现travel方法'''
        while self.next!=None:
            print self.val
            self=self.next
        print self.val
l1=ListNode(2)
l1.append(4)
l1.append(3)
l1.travel()
l1.travel()

这里有个问题,我本来以为l1.append(3),l1应该是4所在的第二个结点的地址,也就是l1.val应该是4,结果还是2,那说明python其实对于self做实参其实是值传递

最后

以上就是花痴麦片为你收集整理的leetcode第1题的全部内容,希望文章能够帮你解决leetcode第1题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部