【代码随想录算法训练营——Day33】动态规划——62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树
LeetCode题目链接
https://leetcode.cn/problems/unique-paths/description/
https://leetcode.cn/problems/unique-paths-ii/submissions/669205256/
https://leetcode.cn/problems/integer-break/description/
https://leetcode.cn/problems/unique-binary-search-trees/description/
题解
62.不同路径
写对了。
63.不同路径II
多了一个障碍物,有一个思路是遍历时每次判断当前位置的上方和左方是否的grid是否为1,如果为1就只加上另一边的值,而如果是边边的值,则为0。经过各种和测试用力的修补,终于通过了。
题解的代码高度凝练了思想。
343.整数拆分
下周目看。
96.不同的二叉搜索树
下周目看。
代码
//62.不同路径
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0;i < m;i++) {dp[i][0] = 1;}for (int i = 0;i < n;i++) {dp[0][i] = 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];}
};int main() {int m1 = 3, n1 = 7, m2 = 3, n2 = 2;Solution s;printf("%d", s.uniquePaths(m1, n1));return 0;
}
//63.不同路径II
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {vector<vector<int>> dp(obstacleGrid.size(), vector<int>(obstacleGrid[0].size(), 0));if (obstacleGrid[0][0] == 1) dp[0][0] = 0;else dp[0][0] = 1;for (int i = 1;i < dp[0].size();i++) {if (obstacleGrid[0][i] == 1) dp[0][i] = 0;else dp[0][i] = dp[0][i - 1];}for (int i = 1;i < dp.size();i++) {if (obstacleGrid[i][0] == 1) dp[i][0] = 0;else dp[i][0] = dp[i - 1][0];}for (int i = 1;i < dp.size();i++) {for (int j = 1;j < dp[i].size();j++) {if (obstacleGrid[i][j] == 1) {dp[i][j] = 0;}else {if (obstacleGrid[i - 1][j] == 1) {dp[i][j] = dp[i][j - 1];}else if (obstacleGrid[i][j - 1] == 1) {dp[i][j] = dp[i - 1][j];}else {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}}}for (int i = 0;i < dp.size();i++) {for (int j = 0;j < dp[i].size();j++) {if (obstacleGrid[i][j] == 1) dp[i][j] = 0;}}return dp[dp.size() - 1][dp[0].size() - 1]; }
};int main() {vector<vector<int>> obstacleGrid1 = { {0,0,0},{0,1,0},{0,0,0} }, obstacleGrid2 = { {0,1} ,{0,0} }, obstacleGrid3 = { {0} }, obstacleGrid4 = { {1,0} };vector<vector<int>> obstacleGrid5 = { {0,0,0,0,0} ,{0,0,0,0,1},{0,0,0,1,0},{0,0,1,0,0} }, obstacleGrid6 = { {0,0},{1,1},{0,0} };Solution s;printf("%d", s.uniquePathsWithObstacles(obstacleGrid5));return 0;
}