class Solution {
//key observe: when each component is done, its beginX,endX or beginY,endX will change
public:
vector<vector<int> > generateMatrix(int n) {
if(0 == n) return vector<vector<int> >();
vector<vector<int> > result(n, vector<int>(n));
int beginX = 0, endX = n-1;
int beginY = 0, endY = n-1;
int cur = 1;
int nSquare = n*n;
while (true) {
// From left to right
for (int i = beginX; i <= endX; ++i)
result[beginY][i] = cur++;
if (++beginY > endY) break;
// From top down
for (int i = beginY; i <= endY; ++i)
result[i][endX] = cur++;
if (beginX > --endX) break;
// From right to left
for (int i = endX; i >= beginX; --i)
result[endY][i] = cur++;
if (beginY > --endY) break;
// From bottom up
for (int i = endY; i >= beginY; --i)
result[i][beginX] = cur++;
if (++beginX > endX) break;
}
return result;
}
};
second time
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int start = 0;
int end = n-1;
vector<vector<int> > matrix(n, vector<int>(n, 0));
int curNum = 1;
while(start <= end)
{
//up
for(int i = start; i <= end; ++i) matrix[start][i] = curNum++;
//right
for(int i = start+1; i <= end-1; ++i) matrix[i][end] = curNum++;
//bottom
if(start != end)
for(int i = end; i >= start; --i) matrix[end][i] = curNum++;
//left
for(int i = end-1; i >= start+1; --i) matrix[i][start] = curNum++;
start++;
end--;
}
return matrix;
}
};
本文详细介绍了使用C++语言生成矩阵的方法,包括组件完成时的观察机制,以及从左到右、从上到下、从右到左、从下到上的遍历策略。
1149

被折叠的 条评论
为什么被折叠?



