class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > ret(n, vector<int>(n));
int i = 0;
int j = 0;
int d = 0;
for (int t = 1; t <= n * n; t++) {
ret[i][j] = t;
switch (d) {
case 0:
if (j + 1 == n || ret[i][j + 1]) {
i++; d = 1;
} else {
j++;
}
break;
case 1:
if (i + 1 == n || ret[i + 1][j]) {
j--; d = 2;
} else {
i++;
}
break;
case 2:
if (j == 0 || ret[i][j - 1]) {
i--; d = 3;
} else {
j--;
}
break;
case 3:
if (i == 0 || ret[i - 1][j]) {
j++; d = 0;
} else {
i--;
}
break;
}
}
return ret;
}
};
Small Case: 8ms
Large Case: 24ms
Time: O(n^2)
Space: O(n^2)