classSolution { public: vector<vector<int>> generateMatrix(int n) { int i = 0; int j = 0; int count = 1; //从1到n*n int column = n; //每一个循环中的列数 int line = n; //每一个循环中的行数 int circle = n / 2;//循环n/2圈 vector<vector<int>> matrix(n, vector<int>(n, 0));//vector创建二维数组 while (circle--) {
for (int c = 0;c < column - 1;c++) matrix[i][j++] = count++; for (int l = 0;l < line - 1;l++) matrix[i++][j] = count++; for (int c = 0;c < column - 1;c++) matrix[i][j--] = count++; for (int l = 0;l < line - 1;l++) matrix[i--][j] = count++; column -= 2; //每循环一圈,需要排列的行数和列数都 -2 line -= 2; j++; //第二圈的列的起始位置要从第一圈的终点右移动一格,因此 j + 1 i++; //虽然第二圈行的起始位置 = 第一圈终点的行的位置,但是最后一个for循环使行数多减去了1,因此 i + 1 } if (n % 2 != 0) //n为奇数时,中间的单独赋值 matrix[n / 2][n / 2] = n * n; return matrix;