我们访问的顺序就是最外面这一圈,像是剥洋葱一样,一条一条的把边剥开,然后每次处理的就是一个新的矩形,代码其实非常好理解,up,down,
left,
right 分别表示矩形的上下左右边界,count 表示当前要填入的数字,vec 是结果矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution { public: vector<vector<int>> generateMatrix(int n) { int up = 0, down = n - 1, left = 0, right = n - 1; int count = 1; vector<vector<int>> vec(n, vector<int>(n, 0)); while (1) { for (int i = left; i <= right; i++) vec[up][i] = count++; if (++up > down) break; for (int i = up; i <= down; i++) vec[i][right] = count++; if (--right < left) break; for (int i = right; i >= left; i--) vec[down][i] = count++; if (--down < up) break; for (int i = down; i >= up; i--) vec[i][left] = count++; if (++left > right) break; } return vec; } };