19、剑指offer--顺时针打印链表
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
解题思路:首先获得矩阵的行数和列数
1)然后定义四个变量表示当前的left、right、top、bottom
2)left<=right && top<=bottom按照从左到右、从上到下、从右到左、从下到上的顺序打印
3)需要注意的是:在从右到左时,如果当前矩阵只剩下一列,不需要进行此次操作,进行相关情况的判断;同理从下到上也是如此。
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 class Solution { 5 public: 6 vector<int> printMatrix(vector<vector<int> > matrix) { 7 vector<int> result;//存储结果 8 int row = matrix.size(); 9 int colunm = matrix[0].size(); 10 if(row<=0 || colunm <= 0) 11 return result; 12 int left = 0; 13 int right = colunm - 1; 14 int top = 0; 15 int bottom = row - 1; 16 while((left<=right) && (top <= bottom)) 17 { 18 //从左向右 19 for(int i=left;i<=right;i++) 20 { 21 result.push_back(matrix[top][i]); 22 } 23 top++; 24 //从上到下 25 for(int i= top;i<=bottom;i++) 26 { 27 result.push_back(matrix[i][right]); 28 } 29 right--; 30 //从右到左 31 //只剩下一行情况,因为之前top已经++,此时top==bottom+1 但是left!=right,不加判断会又从右往回输出一遍 32 if(top <= bottom) 33 { 34 for(int i =right;i>=left;i--) 35 { 36 result.push_back(matrix[bottom][i]); 37 } 38 } 39 bottom--; 40 //从下到上 41 //只剩下一列情况,此时top!=bottom 因为right之前已经--,此时left==right+1,不加判断会又从下往上再输出一遍 42 if(left <= right) 43 { 44 for(int i= bottom;i>=top;i--) 45 { 46 result.push_back(matrix[i][left]); 47 } 48 } 49 left++; 50 } 51 return result; 52 } 53 }; 54 int main() 55 { 56 vector<vector<int> > a; 57 vector<int> b; 58 b.push_back(1); 59 b.push_back(2); 60 b.push_back(3); 61 b.push_back(4); 62 a.push_back(b); 63 b.clear(); 64 b.push_back(5); 65 b.push_back(6); 66 b.push_back(7); 67 b.push_back(8); 68 a.push_back(b); 69 b.clear(); 70 b.push_back(9); 71 b.push_back(10); 72 b.push_back(11); 73 b.push_back(12); 74 a.push_back(b); 75 b.clear(); 76 b.push_back(13); 77 b.push_back(14); 78 b.push_back(15); 79 b.push_back(16); 80 a.push_back(b); 81 b.clear(); 82 Solution s; 83 vector<int> c; 84 c = s.printMatrix(a); 85 for(int i=0;i<c.size();i++) 86 cout<<c[i]<<" "; 87 cout<<endl; 88 89 b.clear(); 90 a.clear(); 91 b.push_back(1); 92 b.push_back(2); 93 b.push_back(3); 94 b.push_back(4); 95 b.push_back(5); 96 a.push_back(b); 97 98 c = s.printMatrix(a); 99 for(int i=0;i<c.size();i++) 100 cout<<c[i]<<" "; 101 cout<<endl; 102 return 0; 103 }