ClimbingStairs「程式設計開發」

2021-12-29 19:46:05 字數 1911 閱讀 8314

暴力破解,會超時!

class solution(object):

def climbstairs(self, n):

""":type n: int

:rtype: int

"""return self.climb_stairs(0,n)#第乙個引數代表還沒有邁出第一步

def climb_stairs(self,i,n):

if( i>n): #如果在最後了2步之後,超出n的值,則證明這走法不合適,不是一種走法

return 0

if( i==n):#正好相等,則是一種走法,返回1

return 1

step1=self.climb_stairs(i+1,n) # 下一次走一步

step2=self.climb_stairs(i+2,n)# 下一次走兩步

print step1,step2

return step1+step2

so = solution()

print so.climbstairs(35);

#暴力破解

#一遍一遍的去模擬過程方法二

#-*- coding: utf-8 -*-

# 方法二

class solution(object):

def climbstairs(self, n):

""":type n: int

:rtype: int

"""li={} #儲存已經探明的台階走法的種數

return self.climb_stairs(0,n,li)

def climb_stairs(self,i,n,li):

if i>n: #在邁出最後一步(可能是乙個台階,兩個台階)之後,如果超過

return 0 #則表示這種走台階的方法是不可行的

elif i==n: #若相等,則表示該種走台階的方法是可行的

return 1 #故返回1,代表一種走法

elif li.get(i,-1) != -1: #若第i個台階到到台階頂的種數存在,

return li.get(i) #則直接返回該種數

step1=self.climb_stairs(i+1,n,li) #試探只走乙個台階的情況

step2=self.climb_stairs(i+2,n,li) #試探走兩個台階的情況

li[i] = step1+step2 #儲存第i個台階走到台階頂的走法種數

return li.get(i)

so = solution()

print so.climbstairs(35);

#舉個例子,當n等於5的時候,若遞迴到i=3

# i=3,下一步遞迴i+1,i+1的值為4,

# i=4,下一步遞迴i+1,i+1的值為5,滿足i==n的情況,返回1

# i=4,然後在遞迴i+2,i+2的值為6,滿足i>n的情況,放回0

# i=4,設定li[i]=step1+step2,即為li[4]=step1+step2=1+0=1,返回

#i=3,下一步遞迴i+2,i+2的值為5,

#i=5,滿足遞迴條件i==n,返回1

#i=3,li[i]=step1+step2,即li[3]=step1+step2=1+1=2方法三:

class solution(object):

def climbstairs(self, n):

""":type n: int

:rtype: int

"""k=1

m=2if n==1:

return k

if n==2:

return m

for i in range(3,n+1):

t=k+m

k=mm=t

return m試出來的!

鑑於本人知識水平有限,如有錯誤,歡迎指正!

演算法4 爬梯子Climbing Stairs

題目 你準備要爬樓梯。你面對的是乙個 n 步可以走上去的樓梯。你每次可以走一步或者兩步,那麼你有幾種不同的方式可以爬上去嗎?n為正 思路 我看到題的第乙個想法,拿個數試下找規律,我以n為3來找,即要爬乙個3階樓梯,第一種一步三次,第二種先一步後兩步,第三種先兩步後一步,共三種,當n為4時有5種,發現...

靜態聯編與動態聯編

在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...

靜態聯編和動態聯編

聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...