spiral matrix

 1 class Solution {
 2 public:
 3     
 4     vector<vector<int>> generateMatrix(int num) {
 5         // Start typing your C/C++ solution below
 6         // DO NOT write int main() function
 7       
 8         vector<vector<int>> v(num,vector<int>(num,0));
 9         
10         int m ,n;
11         m = n = num;
12         if( m == 0 ) return v;
13               
14         int startx = 0,starty=0;
15         
16         
17         int k= 1;
18         while( k<=num*num )
19         {
20             //cout<<starty<<" "<<n <<" "<<k<<endl;
21             for(int i=starty; i<n; i++)
22                 v[startx][i] = k++;    
23             
24             startx ++;
25             if( startx >= m ) break;
26             
27             for(int i=startx; i<m; i++)   
28                v[i][n-1]=k++; 
29            
30             n--;
31             if( starty>=n ) break;
32                      
33             for(int i=n-1; i>=starty; i--)
34                v[m-1][i] = k++;
35                  
36             m--;
37             if( startx >= m ) break;
38             
39             for(int i=m-1; i>=startx; i--)
40                v[i][starty] = k++;  
41                      
42             starty++;
43             if( starty>=n ) break;
44     
45         }
46         return v;      
47     }
48 };

spiral matrix 2

 1 class Solution {
 2 public:
 3     
 4     vector<int> spiralOrder(vector<vector<int> > &matrix) {
 5         // Start typing your C/C++ solution below
 6         // DO NOT write int main() function
 7       
 8         vector<int> v;
 9         int rows;
10         int cols;
11         rows = matrix.size();
12         if( rows == 0 ) return v;
13         cols = matrix[0].size();
14         if( cols == 0 ) return v;
15 
16         int m = rows;
17         int n = cols;
18         int startx = 0,starty=0;
19         
20         while( 1 )
21         {
22             for(int i=starty; i<n; i++)
23                 v.push_back( matrix[startx][i] );
24           
25             startx ++;
26             if( startx >= m ) break;
27             
28             for(int i=startx; i<m; i++)   
29                 v.push_back( matrix[i][n-1] );
30            
31             n--;
32             if( starty>=n ) break;
33             
34             
35             //startx = m-1;
36             for(int i=n-1; i>=starty; i--)
37                  v.push_back( matrix[m-1][i] );
38                  
39             m--;
40             if( startx >= m ) break;
41             
42             for(int i=m-1; i>=startx; i--)
43                 v.push_back( matrix[i][starty] );   
44                      
45             starty++;
46             if( starty>=n ) break;
47     
48         }
49         return v;      
50     }
51 };

 

posted on 2013-07-04 17:23  jumping_grass  阅读(135)  评论(0)    收藏  举报

导航