classSolution{public:intfib(int n){if(n ==0|| n==1)return n;
vector<int>dp(n+1,0);
dp[0]=0;
dp[1]=1;for(int i =2; i < dp.size(); i++){
dp[i]= dp[i-1]+ dp[i-2];}return dp[n];}};
优化版(空间复杂度优化到O(1))
classSolution{public:intfib(int n){if(n <2)return n;int first =0,second =0,third =1;for(int i =2; i<= n; i++){
first = second;
second = third;
third = first + second;}return third;}};
classSolution{public:intclimbStairs(int n){if(n <=1)return n;
vector<int>dp(n+1,0);int first =0,second =1,third =2;for(int i =3; i<= n; i++){
first = second;
second = third;
third = first + second;}return third;}};
vector<vector<int>>dp(m, vector<int>(n,0));for(int i =0; i < m && obstacleGrid[i][0]==0; i++) dp[i][0]=1;for(int j =0; j < n && obstacleGrid[0][j]==0; j++) dp[0][j]=1;
遍历顺序:从左到右 一层一层
for(int i =1; i < m; i++){for(int j =1; j < n; j++){if(obstacleGrid[i][j]==1)continue;
dp[i][j]= dp[i -1][j]+ dp[i][j -1];}}
代码实现
classSolution{public:intuniquePathsWithObstacles(vector<vector<int>>& nums){int m = nums.size();int n = nums[0].size();
vector<vector<int>>dp(m,vector<int>(n,0));for(int i =0; i < m && nums[i][0]==0; i++) dp[i][0]=1;for(int j =0; j < n && nums[0][j]==0; j++) dp[0][j]=1;for(int i =1; i < m; i++){for(int j =1; j < n; j++){if(nums[i][j]==1)continue;
dp[i][j]= dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}};
力扣343.整数拆分
题目描述
思路分析
dp【i】的含义:拆解数字 i,得到的最大乘积dp【i】
怎么得到dp【i】:第一种:拆解 j,j * (i - j )
第二种:拆解(i - j),j * dp【i - j】
递推公式
dp[i]=max(dp[i],max((i - j)* j, dp[i - j]* j));
初始化:没有必要初始化dp【0】,dp【1】,dp【2】 = 1
遍历顺序:i 从3开始,j 从 1枚举
for(int i =3; i <= n ; i++){for(int j =1; j < i -1; j++){
dp[i]=max(dp[i],max((i - j)* j, dp[i - j]* j));}}
代码实现
classSolution{public:intintegerBreak(int n){
vector<int>dp(n+1,0);
dp[2]=1;for(int i =3; i <= n; i++){for(int j =1; j < i -1; j++){
dp[i]=max(dp[i],max((i - j)* j, j * dp[i - j]));}}return dp[n];}};
动态规划——基础题目力扣509.斐波那契数题目描述思路分析代码实现普通版优化版(空间复杂度优化到O(1))力扣70.爬楼梯题目描述思路分析代码实现普通版优化版(空间复杂度优化到O(1))力扣746.使用最小花费爬楼梯题目描述思路分析代码实现力扣62.不同路径题目描述思路分析代码实现力扣63.不同路径Ⅱ题目描述思路分析代码实现力扣343.整数拆分题目描述思路分析代码实现力扣96.不同的二叉搜索树题目描述思路分析代码实现力扣509.斐波那契数题目描述思路分析dp【i】的含义就是第 i 个斐波那契数的