螺旋矩阵是我一次面试的题
哈哈那时候还没有怎么刷过题,然后做题都是硬钢,技巧不成熟,现在看看那时候自己做的真是个憨憨。
https://www.jianshu.com/p/7bd679b60f88
不过思路还行,就是螺旋形遍历矩阵,又刷了lc54 写了个LeetCode版本的 内存消耗略大
不过emmm跑了评论里的几个题解,和我半斤八两嘛。
class Solution {
public:
//while超好用
vector<int> spiralOrder(vector<vector<int>>& matrix) {
//一定会遍历n*n个数字
//过去的我定了一个边界 怕碰壁
vector<int> res;
if(matrix.empty())
return res;
int m=matrix.size();
int n=matrix[0].size();
int biaoji[m][n];
memset(biaoji,0,sizeof(biaoji));
//横竖反横 反叔
int count=m*n;
int x=0;
int y=0;
while(count>0){
while(y<n&&biaoji[x][y]==0){
res.push_back(matrix[x][y]);
biaoji[x][y]=-1;
y++;
}
y--;
x++;
while(x<m&&biaoji[x][y]==0){
res.push_back(matrix[x][y]);
biaoji[x][y]=-1;
x++;
}
x--;
y--;
while(y>=0&&biaoji[x][y]==0){
res.push_back(matrix[x][y]);
biaoji[x][y]=-1;
y--;
}
y++;
x--;
while(x>=0&&biaoji[x][y]==0){
res.push_back(matrix[x][y]);
biaoji[x][y]=-1;
x--;
}
x++;
y++;
count--;
}
return res;
}
};
LC59
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗 :9.1 MB, 在所有 C++ 提交中击败了5.54%的用户
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//我觉得vector<vector<int>>不如数组好用 明明。
vector<vector<int>> res;
if(n==0)
return res;
for(int i=0;i<n;i++){
vector<int> xx;
for(int j=0;j<n;j++){
xx.push_back(-1);
}
res.push_back(xx);
}
int count=1;
int x=0;int y=0;
while(count<=n*n){
while(y<n&&res[x][y]==-1){
// res.push_back(matrix[x][y]);
res[x][y]=count++;
y++;
}
y--;
x++;
while(x<n&&res[x][y]==-1){
res[x][y]=count++;
x++;
}
x--;
y--;
while(y>=0&&res[x][y]==-1){
res[x][y]=count++;
y--;
}
y++;
x--;
while(x>=0&&res[x][y]==-1){
res[x][y]=count++;
x--;
}
x++;
y++;
// count++;
}
return res;
}
};
记录两种题解:
第一种比较经典 精简
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n ,vector<int>(n,0));
int l=0;
int r=n-1;
int u=0;
int d=n-1;
int begin=1;
int end=n*n;
while(begin<=end){
for(int i=l;i<=r;i++)res[u][i]=begin++;
u++;
for(int i=u;i<=d;++i)res[i][r]=begin++;
r--;
for(int i=r;i>=l;--i)res[d][i]=begin++;
d--;
for(int i=d;i>=u;--i)res[i][l]=begin++;
l++;
}
return res;
}
};
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix;
for(int i = 0; i < n; ++i){
vector<int> temp(n,0);
matrix.push_back(temp);
}
int count = 1;
for(int i = 0; i <= n/2; ++i){
walkLayer(matrix,i,count);
}
return matrix;
}
void walkLayer(vector<vector<int>>& matrix, int layer, int& count){
int n = matrix.size();
if(layer == n-1-layer){
matrix[layer][layer] = count;
return;
}
for(int i = layer; i <= n-1-layer; ++i){
matrix[layer][i] = count++;
}
for(int i = layer+1; i <= n-1-layer; ++i){
matrix[i][n-1-layer] = count++;
}
for(int i = n-2-layer; i >= layer; --i){
matrix[n-1-layer][i] = count++;
}
for(int i = n-2-layer; i > layer; --i){
matrix[i][layer] = count++;
}
}
网友评论