本文主要是介绍算法训练营day42,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
dp含义确定
递推公式
初始化
遍历顺序
打印
题目1:62. 不同路径 - 力扣(LeetCode)
class Solution {
public:int uniquePaths(int m, int n) {// 定义dp数组 含义是每个坐标到达的路径vector<vector<int>> dp(m, vector<int>(n, 0));// 初始化,这里要初始化最左面和最上面的坐标 = 1for(int j = 0;j < n;j++) dp[0][j] = 1;for(int i = 0;i < m;i++) dp[i][0] = 1;for(int i = 1;i < m;i++) {for(int j = 1;j < n;j++) {// 递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] ;}}return dp[m - 1][n - 1];}
};
题目2:63. 不同路径 II - 力扣(LeetCode)
class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {vector<vector<int>> dp(obstacleGrid.size(), vector<int>(obstacleGrid[0].size(), 0));for(int i = 0;i < obstacleGrid.size();i++) {if(obstacleGrid[i][0] == 0) dp[i][0] = 1;else break;}for(int j = 0;j < obstacleGrid[0].size();j++) {if(obstacleGrid[0][j] == 0) dp[0][j] = 1;else break;}for(int i = 1;i < obstacleGrid.size();i++) {for(int j = 1;j < obstacleGrid[0].size();j++) {if(obstacleGrid[i][j] == 0) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}}return dp[obstacleGrid.size() - 1][obstacleGrid[0].size() - 1];}
};
这篇关于算法训练营day42的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!