Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 问题描述:给定一个整数n,生成一个方阵,它含有从1到n^2的元素,而且这些整数以向中间旋转的方式排列。 我采用的是最笨的办法,先来看外面一圈是如何计算的,第0行,从0~2依次是1~3,然后是第2列,第1个是4,然后是第2行,从2~0依次是5~7,然后是第0列,第1个是8。
class Solution { public: vector<vector<int> > generateMatrix(int n) { // Note: The Solution object is instantiated only once and is reused by each test case. vector<vector<int> > vec(n, vector<int>(n)); int i = 0, j = 0; int count = 1; int index = 0; int start = 0, end = n-1; while(count <= n*n) { for(i = index, j = start; j <= end && count <= n*n; j++) vec[i][j] = count++; for(j = n-1-index, i = start+1; i < end && count <= n*n; i++) vec[i][j] = count++; for(i = n-1-index, j = end; j >= start && count <= n*n; j--) vec[i][j] = count++; for(j = index, i = end-1; i >= start+1 && count <= n*n; i--) vec[i][j] = count++; index++; start++; end--; } return vec; } };