-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path62-unique-paths.cpp
88 lines (83 loc) · 1.88 KB
/
62-unique-paths.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
//
// 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
//
// 问总共有多少条不同的路径?
//
//
//
// 示例 1:
//
//
//输入:m = 3, n = 7
//输出:28
//
// 示例 2:
//
//
//输入:m = 3, n = 2
//输出:3
//解释:
//从左上角开始,总共有 3 条路径可以到达右下角。
//1. 向右 -> 向下 -> 向下
//2. 向下 -> 向下 -> 向右
//3. 向下 -> 向右 -> 向下
//
//
// 示例 3:
//
//
//输入:m = 7, n = 3
//输出:28
//
//
// 示例 4:
//
//
//输入:m = 3, n = 3
//输出:6
//
//
//
// 提示:
//
//
// 1 <= m, n <= 100
// 题目数据保证答案小于等于 2 * 10⁹
//
//
// Related Topics 数学 动态规划 组合数学 👍 1821 👎 0
#include "headers.h"
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
int uniquePaths(int m, int n) {
// 使用一维数组滚动,优化空间
int dp[n];
for (int i = 0; i < n; ++i) dp[i] = 1;
for (int i = 1; i < m; ++i) {
for (int j = 1; j < n; ++j) {
dp[j] += dp[j - 1];
}
}
return dp[n - 1];
}
int uniquePaths2(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];
}
};
//leetcode submit region end(Prohibit modification and deletion)
int main() {
Solution s;
vector<int> arr{7, 1, 5, 3, 6, 4};
auto res = s.twoSum(arr, 11);
showVector(res);
}