剑指 Offer 10- I. 斐波那契数列
func fib(n int) int {
if n < 2 {return n}
dp := make([]int,n+1)
dp[0] = 0
dp[1] = 1
for i:=2;i<=n;i++{
dp[i] = (dp[i-1] + dp[i-2])% 1000000007
}
return dp[n]
}
剑指 Offer 10- II. 青蛙跳台阶问题
func numWays(n int) int {
if n < 2 {
return 1
}
dp := make([]int,n+1)
dp[0] = 1
dp[1] = 1
for i:=2;i<=n;i++{
dp[i] = (dp[i-1] + dp[i-2])%1000000007
}
return dp[n]
}
剑指 Offer 63. 股票的最大利润
// 121买卖股票的最佳时机
func maxProfit(prices []int) int {
if len(prices) == 0 {return 0}
n := len(prices)
dp := make([][]int,n)
for i:=0;i<len(dp);i++{
dp[i] = make([]int,2)
}
dp[0][0] = -prices[0]
dp[0][1] = 0
for i:=1;i<n;i++{
dp[i][0] = max(dp[i-1][0], -prices[i])
dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
}
return dp[n-1][1]
}
func max(a, b int) int {
if a > b {return a}
return b
}