您的位置:首页 > 其它

LeetCode - 54/59 - Spiral Matrix(旋转打印数组)

2017-08-08 18:20 417 查看
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,

Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]


You should return 
[1,2,3,6,9,8,7,4,5]
.

旋转打印数组。时间复杂度O(nm),空间复杂度O(nm)

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans;
if (!matrix.size() || !matrix[0].size()) return ans;
int n = matrix.size(), m = matrix[0].size();
vector<vector<bool> > vis(n, vector<bool>(m, false));
int cnt = 0;
int i = 0, j = 0;
while (ans.size() < n * m) {
if (cnt == 0) {
ans.push_back(matrix[i][j]);
vis[i][j] = true;
j++;
if (j >= m || vis[i][j] == true) {
--j;
++i;
cnt = 1;
}
}
else if (cnt == 1) {
ans.push_back(matrix[i][j]);
vis[i][j] = true;
i++;
if (i >= n || vis[i][j] == true) {
--i;
--j;
cnt = 2;
}
}
else if (cnt == 2) {
ans.push_back(matrix[i][j]);
vis[i][j] = true;
j--;
if (j < 0 || vis[i][j] == true) {
++j;
--i;
cnt = 3;
}
}
else if (cnt == 3) {
ans.push_back(matrix[i][j]);
vis[i][j] = true;
--i;
if (i < 0 || vis[i][j] == true) {
++i;
++j;
cnt = 0;
}
}
}
return ans;
}
};


59. Spiral Matrix II

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 ]
]


旋转给数组赋值。时间复杂度O(nm),空间复杂度O(1)

class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> > ans(n, vector<int>(n, 0));
int dir = 0;
int cnt = 1;
int i = 0, j = 0;
while (cnt <= n * n) {
if (dir == 0) {
ans[i][j] = cnt;
++j;
++cnt;
if (j >= n || ans[i][j]) {
--j;
++i;
dir = 1;
}
}
else if (dir == 1) {
ans[i][j] = cnt;
++cnt;
++i;
if (i >= n || ans[i][j]) {
--i;
--j;
dir = 2;
}
}
else if (dir == 2) {
ans[i][j] = cnt;
++cnt;
--j;
if (j < 0 || ans[i][j]) {
++j;
--i;
dir = 3;
}
}
else if (dir == 3) {
ans[i][j] = cnt;
++cnt;
--i;
if (i < 0 || ans[i][j]) {
++i;
++j;
dir = 0;
}
}
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: