int minPathSum(vector<vector<int>>& grid) {
if (grid.size() == 0) {
return0;
}
int rows = grid.size();
int cols = grid[0].size();
vector<vector<int>> sumgrid;
for (int i = 0; i < rows; i++) {
vector<int> row(cols, 0);
sumgrid.push_back(row);
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (i == 0 && j == 0) {
sumgrid[i][j] = grid[i][j];
} elseif (i == 0) {
sumgrid[i][j] = sumgrid[i][j - 1] + grid[i][j];
} elseif (j == 0) {
sumgrid[i][j] = sumgrid[i- 1][j] + grid[i][j];
} else {
sumgrid[i][j] = min(sumgrid[i - 1][j], sumgrid[i][j - 1]) + grid[i][j];
}
}
}
return sumgrid[rows - 1][cols - 1];
}
216 Combination Sum III
思路:回溯
void combination(vector<vector<int>> &result, vector<int> ans, int k, int n) {
if (ans.size() == k && n == 0) {
result.push_back(ans);
**return;**
}
if (ans.size() < k) {
for (int i = ans.empty() ? 1 : ans.back() + 1; i <= 9; i++) {
if (n - i < 0) {
break;
}
**ans.push_back(i);
combination(result, ans, k, n - i);
ans.pop_back();**
}
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int>> result;
vector<int> ans;
combination(result, ans, k, n);
return result;
}