26. 不同路径
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> f(m, vector<int>(n));
for (int i = 0; i < m; i ++ ) f[i][0] = 1;
for (int i = 0; i < n; i ++ ) f[0][i] = 1;
for (int i = 1; i < m; i ++ )
for (int j = 1; j < n; j ++ )
f[i][j] += f[i - 1][j] + f[i][j - 1];
return f[m - 1][n - 1];
}
};
27. 最小路径和
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
for (int i = 0; i < n; i ++ )
for (int j = 0; j < m; j ++ ) {
if (!i && !j) continue;
else {
if (i && j) grid[i][j] += min(grid[i - 1][j], grid[i][j - 1]);
else if (j) grid[i][j] += grid[i][j - 1];
else if (i) grid[i][j] += grid[i - 1][j];
}
}
return grid[n - 1][m - 1];
}
};
28. 爬楼梯
class Solution {
public:
int climbStairs(int n) {
if (n <= 3) return n;
int a = 2, b = 3, c = 0;
for (int i = 4; i <= n; i ++ )
{a
c = a + b;
a = b;
b = c;
}
return c;
}
};
29. 编辑距离
思路:动态规划
集合:
f
[
i
,
j
]
f[i,j]
f[i,j]表示将
w
o
r
d
1
word1
word1的前
i
i
i 个字符变成
w
o
r
d
2
word2
word2的前
j
j
j 个字符,最少需要进行多少次操作
状态转移:最后一个状态转移有六种状态,分别是:
修改、删除、替换第一个字符串末尾,修改、删除、替换第二个字符串的末尾元素
class Solution {
public:
int minDistance(string a, string b) {
int n = a.size(), m = b.size();
a = ' ' + a, b = ' ' + b;
vector<vector<int>> f(n + 1, vector<int>(m + 1));
for (int i = 0; i <= n; i ++ ) f[i][0] = i;
for (int i = 1; i <= m; i ++ ) f[0][i] = i;
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= m; j ++ ) {
f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
int t = a[i] != b[j];
f[i][j] = min(f[i][j], f[i - 1][j - 1] + t);
}
return f[n][m];
}
};
30. 颜色分类
思路1:三指针
0 — — j − 1 0——j - 1 0——j−1维护一段为0的元素, j — — i − 1 j——i-1 j——i−1维护为1的元素, k + 1 — — n u m s . s i z e ( ) − 1 k+1——nums.size()-1 k+1——nums.size()−1维护为2的元素,这三段元素有序
class Solution {
public:
void sortColors(vector<int>& nums) {
for (int i = 0, j = 0, k = nums.size() - 1; i <= k;) {
if (nums[i] == 0) swap(nums[i ++ ], nums[j ++ ]);
else if (nums[i] == 2) swap(nums[i], nums[k -- ]);
else i ++ ;
}
}
};
思路二:
正常比赛中,先扫描一遍,计算0、1、2的个数,输出就可以了
在这里插入代码片
思路三:排序
class Solution {
public:
void sortColors(vector<int>& nums) {
sort(nums.begin(), nums.end());
}
}
};