Description:
https://leetcode.com/problems/spiral-matrix-ii/#/description
Algorithm:
Generally it is the same with 54. Spiral Matrix.
There is one point very important:
The route is right -> down -> left -> up
In down and up, don’t need to check break condition. To finish the matrix, we have to go left and up. So there is no way breaking the loop in left or up.
Code:
class Solution {class Solution {public: vector<vector<int>> generateMatrix(int n) { if (n == 0) return{}; vector<vector<int>> result = vector<vector<int>>(n, vector<int>(n, -1)); int rowLow = 0, colLow = 0, rowHigh = n - 1, colHigh = n - 1; int element = 0; while (true) { for (int i = colLow; i <= colHigh; i++) { result[rowLow][i] = ++element; }
if (++rowLow > rowHigh) break;
for (int i = rowLow; i <= rowHigh; i++) { result[i][colHigh] = ++element; }
if (--colHigh < colLow) break;
for (int i = colHigh; i >= colLow; i--) { result[rowHigh][i] = ++element; } --rowHigh;
for (int i = rowHigh; i >= rowLow; i--) { result[i][colLow] = ++element; } ++colLow; } return result; }};
Timing:
If check left and up, it will be 6ms
Don’t check left or up, it will be 3ms!
Fantastic!