Type:medium
Given a matrix of?m?x?n?elements (m?rows,?n?columns), return all elements of the matrix in spiral order.
Example 1:
Input:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]Output:[1,2,3,6,9,8,7,4,5]
將給定vector<vector<int>>按照螺旋狀輸出,可將其一圈一圈輸出凌停,將一圈輸出視為一次循環(huán)粱年。循環(huán)次數(shù)為matrix.size()和matrix[0].size()的最小值除以2。對(duì)于每一圈數(shù)值罚拟,每次循環(huán)依次輸出:從左到右台诗、從上到下,從右到左赐俗、從下到上拉庶。
class Solution {
public:
? ? vector<int> spiralOrder(vector<vector<int>>& matrix) {
? ? ? ? if(matrix.empty() || matrix[0].empty()) return {};
? ? ? ? int n = matrix.size();
? ? ? ? int m = matrix[0].size();
? ? ? ? int c = m>n? n/2:m/2;
? ? ? ? vector<int> ret;
? ? ? ? for(int i=0; i<c; i++){
? ? ? ? ? ? for(int j=i; j<=m-i-1; j++){
? ? ? ? ? ? ? ? ret.push_back(matrix[i][j]);
? ? ? ? ? ? }
? ? ? ? ? ? for(int j=i+1; j<=n-i-1; j++){
? ? ? ? ? ? ? ? ret.push_back(matrix[j][m-i-1]);
? ? ? ? ? ? }
? ? ? ? ? ? for(int j=m-i-2; j>=i; j--){
? ? ? ? ? ? ? ? ret.push_back(matrix[n-i-1][j]);
? ? ? ? ? ? }
? ? ? ? ? ? for(int j=n-i-2; j>=i+1; j--){
? ? ? ? ? ? ? ? ret.push_back(matrix[j][i]);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if((m>n? n:m) % 2 == 0) return ret;
? ? ? ? if(m>n){
? ? ? ? ? ? for(int i=c; i<=m-c-1; i++){
? ? ? ? ? ? ? ? ret.push_back(matrix[c][i]);
? ? ? ? ? ? }
? ? ? ? ? ? return ret;
? ? ? ? }
? ? ? ? if(n>m){
? ? ? ? ? ? for(int i=c; i<=n-c-1; i++){
? ? ? ? ? ? ? ? ret.push_back(matrix[i][c]);
? ? ? ? ? ? }
? ? ? ? ? ? return ret;
? ? ? ? }
? ? ? ? if(n==m){
? ? ? ? ? ? ret.push_back(matrix[c][c]);
? ? ? ? ? ? return ret;
? ? ? ? }
? ? ? ? return ret;
? ? }
};