1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14def 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]):
示例:
复制代码
1
2
3
4
5
6
7
8
9>>> 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.
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37def 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)))
害!果然就是题目不一样不过还是把这个放进去吧
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class 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 开头。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13# 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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32def 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题内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复