1. 程式人生 > 實用技巧 >LeetCode學習筆記

LeetCode學習筆記

1.遞迴

#1.斐波那契(1,1,2,3,5,8,...前兩項之和是後一項),遞迴問題(呼叫自身,結束條件)


#一 。時間複雜度2**n,即n+1,時間複雜度翻一倍
def fibnacci(n):
    if n==0 or n==1:
        return 1 #結束條件
    else:
        return fibnacci(n-1)+fibnacci(n-2)#前兩項和,呼叫自身
@cal_time#遞迴函式不能直接用裝飾器
def fib1(n):
    return fibnacci(n)

#二。時間複雜度n,空間複雜度n,
@cal_time
def fib2(n):
    li=[1,1]
    for i in range(2,n+1):
        li.append(li[-1]+li[-2])
    return li[n]

#三。時間複雜度n
def fib3(n):
    a=1
    b=1
    c=1
    for i in range(2,n+1):
        c=a+b
        a=b
        b=c
    return c


print(fib1(33))

#時間裝飾器
import time
def cal_time(func):
    def wrapper(*args,**kwargs):
        t1=time.time()
        result=func(*args,**kwargs)
        t2=time.time()
        print("%s running time:%s secs."%(func.__name__,t2-t1))
        return result
    return wrapper