劍指offer 動態規劃

2021-10-24 04:55:51 字數 3169 閱讀 7435

動態規劃

#10_1.py

# 寫乙個函式,輸入 n ,求斐波那契(fibonacci)數列的第 n 項。斐波那契數列的定義如下:

class

solution

:def

fib(self, n:

int)

->

int:

if n==0:

return

0if n==1:

return

1 dp=[0

]*(n+1

) dp[0]

=0dp[1]

=1for i in

range(2

,n+1):

dp[i]

=dp[i-1]

+dp[i-2]

print

(dp)

return dp[-1

]%(1000000007

)

#10_2.py

# 乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。

class

solution

:def

numways

(self, n:

int)

->

int:

if n==0:

return

1if n==1:

return

1if n==2:

return

2 dp=[0

]*(n) dp[0]

=1dp[1]

=2for i in

range(2

,n):

dp[i]

=dp[i-1]

+dp[i-2]

print

(dp)

return dp[-1

]%(1000000007

)

#19.py

#請實現乙個函式用來匹配包含'. '和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(含0次)。在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但與"aa.a"和"ab*a"均不匹配。

class

solution

:def

ismatch

(self, s:

str, p:

str)

->

bool

: slen=

len(s)

plen=

len(p)

dp=[[

false]*

(plen+1)

for _ in

range

(slen+1)

] dp[0]

[0]=

true

for i in

range

(plen)

:if p[i]

=="*"

: dp[0]

[i+1

]=dp[0]

[i-1

]for i in

range

(slen)

:for j in

range

(plen)

:if p[j]

=="."

or s[i]

==p[j]

: dp[i+1]

[j+1

]=dp[i]

[j]elif p[j]

=="*"

:if s[i]

!=p[j-1]

: dp[i+1]

[j+1

]=dp[i+1]

[j-1

]if p[j-1]

=="."

or s[i]

==p[j-1]

: dp[i+1]

[j+1]=

(dp[i]

[j+1

]| dp[i+1]

[j]| dp[i+1]

[j-1])

print

(dp)

return dp[-1

][-1

]

#48.py

# 請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度。

# 示例 1:

# 輸入: "abcabcbb"

# 輸出: 3

# 解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

# 示例 2:

# 輸入: "bbbbb"

# 輸出: 1

# 解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

# 示例 3:

# 輸入: "pwwkew"

# 輸出: 3

# 解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

# 請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。

class

solution

:def

lengthoflongestsubstring

(self, s:

str)

->

int:

tmp=

0 res=

0 d=

for i in

range

(len

(s))

: j=d.get(s[i],-

100)

d[s[i]]=i

if i-j<=tmp:

tmp=i-j

else

: tmp=tmp+

1 res=

max(res,tmp)

print

(res,tmp)

return res

劍指Offer(八) 動態規劃

給你一根長度為n的繩子,請把繩子剪成整數長的m段 m n都是整數,n 1並且m 1,m n 每段繩子的長度記為k 1 k m 請問k 1 x.xk m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。我們先定義函式f n 為把繩子剪成...

golang實現劍指offer 動態規劃題型

leetcode 面試題49 醜數 題目描述 我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小到大的順序的第 n 個醜數。示例 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。核心思想 解題思路 func nthuglynumber ...

劍指 offer 貪心 動態規劃篇

10 i.斐波拉契數列 題意 面試題10 i.斐波那契數列 思路 最基礎的動態規劃題。資料量比較大的時候不能使用遞迴,會報stackoverflow exception,最優的方式是迭代計算。class solution int a 0 int b 1 int index 2 int tmp whi...