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:
You should return
旋转打印数组。时间复杂度O(nm),空间复杂度O(nm)
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 =
You should return the following matrix:
旋转给数组赋值。时间复杂度O(nm),空间复杂度O(1)
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; } };
相关文章推荐
- LeetCode------54. Spiral Matrix(螺旋二维矩阵)-----59. Spiral Matrix II(n的螺旋矩阵)
- LeetCode54/59 Spiral Matrix I/II
- LeetCode(54)(59) Spiral Matrix I II
- leetcode54-Spiral Matrix(打印蛇形矩阵)
- leetcode-54. Spiral Matrix(打印蛇形矩阵)
- [LeetCode] Spiral Matrix 旋转打印矩阵
- <LeetCode OJ> 54 / 59 Spiral Matrix( I / II )
- leetcode-54 Spiral Matrix 顺时针打印矩阵(《剑指offer》面试题20)
- LeetCode 54/59. Spiral Matrix i, ii
- Leetcode 54. Spiral Matrix (Medium) (cpp)
- Leetcode 54 Spiral Matrix
- LeetCode 59. Spiral Matrix II
- Leetcode:59. Spiral Matrix II
- [LeetCode]54 Spiral Matrix
- LeetCode 59. Spiral Matrix II
- LeetCode 54. Spiral Matrix(螺旋矩阵)
- leetcode---spiral-matrix---数组
- LeetCode 54 - Spiral Matrix
- (Java)LeetCode-59. Spiral Matrix II
- Spiral Matrix:旋转打印矩阵