您的位置:首页 > 其它

59. Spiral Matrix II

2017-02-02 01:36 316 查看
1刷

跟之前那个蛇形一样。。。

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>ve;
vector<int>v;
for(int i = 0; i < n; ++ i)
v.push_back(0);
for(int i = 0; i < n; ++ i)
ve.push_back(v);
int layer = (n + 1) / 2;
int num = 1;
int m = n;
for(int i = 0; i < layer; i ++)
{
//row i: top-left --> top-right
for(int j = i; j < n-i; j ++)
ve[i][j] = num++;

//col n-1-i: top-right --> bottom-right
for(int j = i+1; j < m-i; j ++)
ve[j][n-1-i] = num++;

//row m-1-i: bottom-right --> bottom-left
if(m-1-i > i)
{
for(int j = n-1-i-1; j >= i; j --)
ve[m-1-i][j] = num++;
}

//col i: bottom-left --> top-left
if(n-1-i > i)
{
for(int j = m-1-i-1; j > i; j --)
ve[j][i] = num++;
}
}
return ve;
}
};


2刷

十分好,马上学习了上一题蛇形的做法,手动刷出了这一题,还要3刷练手练思维

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>dirs{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
vector<vector<int>>ve(n, vector<int>(n, 0));
if(n == 0) return ve;

vector<int>step{n, n - 1};
int num = 1;
int index = 0;
int ir = 0, ic = -1;
while(step[index % 2]){
for(int i = 0; i < step[index % 2]; ++ i){
ir += dirs[index][0]; ic += dirs[index][1];
ve[ir][ic] = num++;
}
step[index % 2]--;
index = (index + 1) % 4;
}
return ve;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: