乙隻青蛙一次可以跳上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 下面是分析 ...