1. 程式人生 > >螺旋矩陣[leetcode]cpp

螺旋矩陣[leetcode]cpp

相信找到這裡的友軍,應該對這個演算法的原理已經有所瞭解,這裡就不囉嗦了,直接上料:

#include <iostream> #include <vector> using namespace std; //給定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。 //輸入: //[ //  [1, 2, 3], //  [4, 5, 6], //  [7, 8, 9] //] //輸出: [1,2,3,6,9,8,7,4,5]

//輸入: //[ //  [1, 2, 3, 4], //  [5, 6, 7, 8], //  [9,10,11,12] //] //輸出: [1,2,3,4,8,12,11,10,9,5,6,7]

//輸入: //  [1,  2,  3,  4,  5], //  [6,  7,  8,  9,  10], //  [11, 12, 13, 14, 15], //  [16, 17, 18, 19, 20] //輸出: [1,2,3,4,8,12,11,10,9,5,6,7] class Solution { public:              vector<int> spiralOrder(vector<vector<int>>& matrix) {         vector<int> res;         res.clear();         if (0==matrix.size()) return res;           int m=matrix[0].size();         int n=matrix.size();         if (!m|!n)    return res;                   int i=0,j=0,a=0,b=0,c=0,d=0;         int ems=m*n;         while(1){             for(i=a;i<m;i++) res.push_back(matrix[j][i]); //向右找             if (ems==res.size()) break;             i--;             for(j=b+1;j<n;j++) res.push_back(matrix[j][i]); //向下找             if (ems==res.size()) break;             j--;             for(i=m-2;i>=c;i--) res.push_back(matrix[j][i]);//向左找             if (ems==res.size()) break;             i++;             for(j=n-2;j>d;j--) res.push_back(matrix[j][i]);//向上找             if (ems==res.size()) break;             j++;             m--; n--; a++; b++; c++; d++;//利用m,n,a,b,c,d這幾個引數逐步收縮         }           return res;      }

    vector<int> spiralOrder2(vector<vector<int>>& matrix) {         vector<int> res;         res.clear();                  if (0==matrix.size()) return res;          int m=matrix[0].size();         int n=matrix.size();         if (!m|!n)    return res;                   int i=0,j=0,a=0,b=0,c=0,d=0;         int ems=m*n;         int cn=0;          while(1){             for(i=a;i<m;i++) {                 res.push_back(matrix[j][i]);                  cn++;             }             if (ems==cn) break;             i--;             for(j=b+1;j<n;j++) {                 res.push_back(matrix[j][i]);                  cn++;             }             if (ems==cn) break;             j--;             for(i=m-2;i>=c;i--) {                 res.push_back(matrix[j][i]);                  cn++;             }             if (ems==cn) break;             i++;             for(j=n-2;j>d;j--) {                 res.push_back(matrix[j][i]);                  cn++;             }               if (ems==cn) break;             j++;             m--; n--; a++; b++; c++; d++;         }           return res;       } };

dev tool:  devcpp

#include <iostream> #include <vector> #include "solution.h"

using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {     int i=0,j=0;     //test();          Solution sn;     vector<vector<int>> matrix;     vector<int> in;      vector<int> res;          //     //  [1,  2,  3,  4,  5], //  [6,  7,  8,  9,  10], //  [11, 12, 13, 14, 15], //  [16, 17, 18, 19, 20]

     //    in.clear(); //    for(i=1;i<=5;i++) in.push_back(i); //    matrix.push_back(in); //     //    in.clear(); //    for(i=6;i<=10;i++) in.push_back(i); //    matrix.push_back(in); //     //    for (i=0;i<2;i++){ //        cout<<"["; //        for(j=0;j<5;j++) cout<<matrix[i][j]<<" "; //        cout<<"],\n"; //    } //    cout<<endl; //    res.clear(); //    res=sn.spiralOrder(matrix); //    cout<<"["; //    for (i=0;i<10;i++) cout<<res[i]<<" "; //    cout<<"]\n"; //    cout<<endl; //    cout<<"size:"<<res.size(); //    cout<<endl;           ////     ////  [1,  2,  3,  4,  5], ////  [6,  7,  8,  9,  10], ////  [11, 12, 13, 14, 15], ////  [16, 17, 18, 19, 20] // //     //    in.clear(); //    for(i=1;i<=5;i++) in.push_back(i); //    matrix.push_back(in); //     //    in.clear(); //    for(i=6;i<=10;i++) in.push_back(i); //    matrix.push_back(in); //     //    in.clear(); //    for(i=11;i<=15;i++) in.push_back(i); //    matrix.push_back(in); //     //    in.clear(); //    for(i=16;i<=20;i++) in.push_back(i); //    matrix.push_back(in); //     //    for (i=0;i<4;i++){ //        cout<<"["; //        for(j=0;j<5;j++) cout<<matrix[i][j]<<" "; //        cout<<"],\n"; //    } //    cout<<endl; //    res.clear(); //    res=sn.spiralOrder(matrix); //    cout<<"["; //    for (i=0;i<20;i++) cout<<res[i]<<" "; //    cout<<"]\n"; //    cout<<endl; //    cout<<endl;

    in.clear();     for(i=1;i<=3;i++) in.push_back(i);     matrix.push_back(in);          in.clear();     for(i=4;i<=6;i++) in.push_back(i);     matrix.push_back(in);          in.clear();     for(i=7;i<=9;i++) in.push_back(i);     matrix.push_back(in);          for (i=0;i<3;i++){         cout<<"[";         for(j=0;j<3;j++) cout<<matrix[i][j]<<" ";         cout<<"],\n";     }     cout<<endl;     res.clear();     res=sn.spiralOrder(matrix);     cout<<"[";     for (i=0;i<9;i++) cout<<res[i]<<" ";     cout<<"]\n";               getchar();     return 0; }