今天偷懒啦 !!! 我觉得主要是那个循环不变量原则
贴一个其他同学那的博客关于对这个原则的讲解我觉得挺有用的
这题要模拟那个矩阵螺旋的过程 要遵循一个左闭右开的原则
再贴一个我自己写了一个多小时的代码吧 虽然没过而且很长 但我真的好好想了啊 网上别人写的代码是真的好看又高效 慢慢来吧。
int n;
cin>>n;
vector< vector<int> > generateMatrix(n, vector<int>(n, 0));
int rowLastNums , columnLastNums = n-1;
int rowFirstNums , columnFirstNums = 0;
int i = 0, j = 1;
int count =2;
generateMatrix[0][0]=1;
if (n == 1)
cout << "[[1]]";
else
{
while (generateMatrix[i][j] != n * n)
{
if (i == rowFirstNums && j <= columnLastNums && j > columnFirstNums)
{
generateMatrix[i][j] = count++;
if (j != columnLastNums)
j++;
else
{
columnFirstNums++;
i++;
}
}
if (j == columnLastNums && i <= rowLastNums && i > rowFirstNums)
{
generateMatrix[i][j] = count++;
if (i != rowLastNums)
i++;
else
{
rowFirstNums++;
j--;
}
}
if (i == rowLastNums && j >= columnFirstNums && j < columnLastNums)
{
generateMatrix[i][j] = count++;
if (j != columnFirstNums)
j--;
else
{
columnLastNums--;
i--;
}
}
if (j == columnFirstNums && i >= rowFirstNums && i < rowLastNums)
{
generateMatrix[i][j] = count++;
if (i != rowFirstNums)
i--;
else
{
rowLastNums--;
j++;
}
}
}
cout << '[';
for (int i = 0; i < generateMatrix.size(); i++)
{
cout << '[';
for (int j = 0; j < generateMatrix[i].size(); j++)
{
if (j != generateMatrix[i].size())
cout << generateMatrix[i][j] << ',';
else
cout << generateMatrix[i][j];
}
if (i != generateMatrix.size())
cout << "],";
else
cout << ']';
}
cout << ']';
}