一.給定一個整數數組 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