一.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
(1)class Solution(object):
def twoSum(self, nums, target):
l={}
for i in range(len(nums)): #必须地址遍历,否则俩个数一样index时都是前。
if nums[i] in l:
return [l[nums[i]],i]
else:
l[target-nums[i]]=i #存的是地址
(2)哈希表,O(n)
class Solution(object):
def twoSum(self, nums, target):
n={}
for i,v in enumerate(nums):
if v in n:
return[n[v],i]
else:
n[target-v]=i
#把target-v当成值存入字典n,值为v的地址
#在后面遍历中n若有target-v,把字典中的值即前面的地址,和当前地址输出
二.
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
(1)class Solution:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
p_head=p=ListNode(0)
while l1 and l2:
p.next=ListNode(l1.val+l2.val)
p=p.next
l1=l1.next
l2=l2.next
if l1:
p.next=l1
if l2:
p.next=l2
p=p_head.next
a=0
while p :
if p.val+a>=10:
p.val=p.val+a-10
a=1
else:
p.val=p.val+a
a=0
if p.next == None:
break
else:
p=p.next
if a==1:
p.next=ListNode(1)
return p_head.next