跟上一题的策略完全一样,这个题是要求保存当前加入的是第几个数,因为矩阵里面存的就是这个东西。
我有尝试想过是不是有一种方法可以直接推算出每一行的数据是哪些,但没过多久就放弃了。这种方法虽然可以避免在一个二维数组中的随机访问,但是策略太复杂了,得不偿失。
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<int> tpres(n, 0);
vector<vector<int> > res(n, tpres);
if(n == 0) return res;
int i=0, j=0, level=0, cur = 1;
while(cur<=n*n){
while(j<n-level) res[i][j++] = cur++;
--j;
while(i<n-level-1) res[++i][j] = cur++;
while(j>level) res[i][--j] = cur++;
--i;
while(i>level) res[i--][j] = cur++;
++j;++i;
level++;
}
return res;
}
};