只出现一次的数字
多数元素
三数之和
颜色分类
合并区间
杨辉三角 II
分析:
先生成杨辉三角,再返回。
代码:
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<vector<int>> res(rowIndex + 1, vector<int>(rowIndex + 1));
for(int i = 0; i <= rowIndex; i++) {
res[i][0] = 1;
res[i][i] = 1;
}
for(int i = 1; i <= rowIndex; i++) {
for(int j = 1; j <= rowIndex; j++) {
res[i][j] = res[i - 1][j] + res[i - 1][j - 1];
}
res[i].resize(i + 1);
}
return res[rowIndex];
}
};
旋转图像
螺旋矩阵 II
分析:
按右、下、左、上的顺序依次填充即可。
代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n));
vector<vector<int>> visited(res);
int cnt = 1;
int row = 0, col = 0;
while(cnt <= n * n) {
//右
while(col < n && !visited[row][col]) {
res[row][col] = cnt++;
visited[row][col] = 1;
col++;
}
col--, row++;
//下
while(row < n && !visited[row][col]) {
res[row][col] = cnt++;
visited[row][col] = 1;
row++;
}
row--, col--;
//左
while(col >= 0 && !visited[row][col]) {
res[row][col] = cnt++;
visited[row][col] = 1;
col--;
}
col++, row--;
//上
while(row >= 0 && !visited[row][col]) {
res[row][col] = cnt++;
visited[row][col] = 1;
row--;
}
row++, col++;
}
return res;
}
};
搜索二维矩阵 II
无重叠区间
分析:
将所有区间按照右边界升序排列,然后循环遍历所有相邻区间:如果当前两个区间重叠,就去掉右边的区间,并把左边的区间赋给右边区间,方便下次判断。
代码:
class Solution {
public:
static bool cmp(vector<int>& x, vector<int>& y) {
return x[1] < y[1];
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), cmp);
int cnt = 0;
for(int i = 1; i < intervals.size(); i++) {
if(intervals[i][0] < intervals[i - 1][1]) {
cnt++;
intervals[i][0] = intervals[i - 1][0];
intervals[i][1] = intervals[i - 1][1];
}
}
return cnt;
}
};