Day 38 动态规划 part01
今日任务
代码实现
斐波那契数
public int fib ( int n) { if ( n == 0 ) { return 0 ; } if ( n == 1 ) { return 1 ; } return fib ( n - 1 ) + fib ( n - 2 ) ; } public int fib2 ( int n) { if ( n <= 1 ) return n; int [ ] dp = new int [ n + 1 ] ; dp[ 0 ] = 0 ; dp[ 1 ] = 1 ; for ( int i = 2 ; i < n + 1 ; i++ ) { dp[ i] = dp[ i - 1 ] + dp[ i - 2 ] ; } return dp[ n + 1 ] ; }
爬楼梯
除了边界值设定,与上一道题基本一样,代码省略
使用最小花费爬楼梯 有点小难,不过还是能想到
public int minCostClimbingStairs ( int [ ] cost) { int [ ] dp = new int [ cost. length + 1 ] ; dp[ 0 ] = 0 ; dp[ 1 ] = 0 ; for ( int i = 2 ; i < cost. length + 1 ; i++ ) { dp[ i] = Math . min ( dp[ i - 1 ] + cost[ i - 1 ] , dp[ i - 2 ] + cost[ i - 2 ] ) ; } return dp[ cost. length] ; } public int minCostClimbingStairs ( int [ ] cost) { int a = 0 ; int b = 0 ; for ( int i = 2 ; i < cost. length + 1 ; i++ ) { int sum = Math . min ( b + cost[ i - 1 ] , a + cost[ i - 2 ] ) ; a = b; b = sum; } return b; }
今日总结
第一天动态规划,比较简单,给我自信 现在的股票越来越看不懂,各路大佬看得也不一样,一天看中好几个,有的涨了有的跌了,有点难玩