73. 矩阵置零
给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。
示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
vector<int> row(m),col(n);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
row[i]=col[j]=true;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(row[i]||col[j])
{
matrix[i][j]=0;
}
}
}
}
};
int m=matrix.size();
int n=matrix[0].size();
得到向量组的行列值进行遍历 这里一定用size() 不能用length()
生成两个向量组存放0的标记 再次遍历置零
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector <int> ans;
if(matrix.empty()) return ans; //若数组为空,直接返回答案
int up = 0; //赋值上下左右边界
int down = matrix.size() - 1;
int left = 0;
int right = matrix[0].size() - 1;
while(true)
{
for(int i = left; i <= right; ++i) ans.push_back(matrix[up][i]); //向右移动直到最右
up++;
if(up > down) break; //重新设定上边界,若上边界大于下边界,则遍历遍历完成,下同
for(int i = up; i <= down; ++i) ans.push_back(matrix[i][right]); //向下
if(-- right < left) break; //重新设定有边界
for(int i = right; i >= left; --i) ans.push_back(matrix[down][i]); //向左
if(-- down < up) break; //重新设定下边界
for(int i = down; i >= up; --i) ans.push_back(matrix[i][left]); //向上
if(++ left > right) break; //重新设定左边界
}
return ans;
}
};
总的来说就是在边界上遍历 不断缩小边界 但是这个初始值down和right都要-1 不然老是runout
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1 输出: [[1]]
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> ret(numRows);
for (int i = 0; i < numRows; ++i) {
ret[i].resize(i + 1);
ret[i][0] = ret[i][i] = 1;
for (int j = 1; j < i; ++j) {
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
return ret;
}
};
简单 推导公式背就完了