劍指Offer(七) 貪心

2021-10-21 08:29:56 字數 1213 閱讀 8082

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

設f[i] 表示 當前跳道第 i 個台階的方法數。那麼f[n]就是所求答案。

假設現在已經跳到了第 n 個台階,那麼前一步可以從哪些台階到達呢?

如果上一步跳 1 步到達第 n 個台階,說明上一步在第 n-1 個台階。已知跳到第n-1個台階的方法數為f[n-1]

如果上一步跳 2 步到達第 n 個台階,說明上一步在第 n-2 個台階。已知跳到第n-2個台階的方法數為f[n-2]

如果上一步跳 n 步到達第 n 個台階,說明上一步在第 0 個台階。已知跳到 第0個台階的方法數為f[0]

那麼總的方法數就是所有可能的和。也就是f[n] = f[n-1] + f[n-2] + ... + f[0]

顯然初始條件f[0] = f[1] = 1

所以我們就可以先求f[2],然後f[3]...f[n-1], 最後f[n]

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

class solution:

def jumpfloorii(self, number):

# write code here

if number==0 or number==1:

return 1

f=[0 for i in range(number+1)]

f[0]=f[1]=1

for i in range(2,number+1):

for j in range(0,i):

f[i]+=f[j]

return f[number]

上述解法時間複雜度 o(n2) ,空間複雜度 o(n)

f[n] = f[n-1] + f[n-2] + ... + f[0]

f[n-1] = f[n-2] + f[n-3] + ... + f[0]

則f[n]=2*f[n-1],f[0]=f[1]=1

等比數列求和

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

class solution:

def jumpfloorii(self, number):

# write code here

n = 1

for i in range(2, number+1):

n = 2*n

return n

《劍指offer》 貪心演算法

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

leetcode 劍指 Offer 專題(七)

劍指 offer 專題第七部。題目 劍指 offer 66.構建乘積陣列。定義 begin v 1 i prod a k a 0 times a 1 times dots times a i 1 quad v 1 0 1 v 2 i prod a k a i 1 times dots times a...

剪繩子 貪心演算法 劍指offer

題目分析 先舉幾個例子,可以看出規律來。2 1 1 3 1 2 4 2 2 5 2 3 6 3 3 7 2 2 3 或者4 3 8 2 3 3 9 3 3 3 10 2 2 3 3 或者4 3 3 11 2 3 3 3 12 3 3 3 3 13 2 2 3 3 3 或者4 3 3 3 下面是分析 ...