1,2--LeetCode-python筆記

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

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章