剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,

Posted wxwhnu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,相关的知识,希望对你有一定的参考价值。

1 题目描述

  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.

2 思路和方法

  直接定义一个矩形,在矩形的四条边取值,程序大大简化。

3 核心代码

技术图片
 1 class Solution 
 2 public:
 3     vector<int> printMatrix(vector<vector<int> > matrix) 
 4         vector<int>vec;
 5         int row = matrix.size();
 6         int column = matrix[0].size();
 7         int left = 0, right = column, up = 0, bottom = row;
 8         while((up < bottom) && (left < right))
 9         
10             for(int i = left; i < right; i++) vec.push_back(matrix[up][i]);
11             for(int i = up+1; i < bottom; i++) vec.push_back(matrix[i][right-1]);
12             for(int i = right-1-1; ((bottom-1)!=up)&&(i >=left); i--) vec.push_back(matrix[bottom-1][i]);
13             for(int i = bottom-1-1; ((right-1)!=left)&&(i >left); i--) vec.push_back(matrix[i][left]);
14             up++;left++; right--; bottom--;
15         
16         return vec;
17     
18 ;
View Code

4 完整代码

技术图片
 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5 
 6 //直接定义一个矩形,在矩形的四条边取值,程序大大简化
 7 class Solution
 8 public:
 9     vector<int>printMatrix(vector<vector<int>>  matrix) 
10         vector<int>vec;
11         int row = matrix.size();
12         int column = matrix[0].size();
13         int left = 0, right = column, up = 0, bottom = row;
14         while ((up < bottom) && (left < right))
15         
16             for (int i = left; i < right; i++) vec.push_back(matrix[up][i]);
17             for (int i = up + 1; i < bottom; i++) vec.push_back(matrix[i][right - 1]);
18             for (int i = right - 1 - 1; ((bottom - 1) != up) && (i >= left); i--) vec.push_back(matrix[bottom - 1][i]);
19             for (int i = bottom - 1 - 1; ((right - 1) != left) && (i >left); i--) vec.push_back(matrix[i][left]);
20             up++; left++; right--; bottom--;
21         
22         return vec;
23     
24 ;
25 
26 int main()
27 
28 
29     Solution a;
30     vector<vector<int>> matrix =   1, 2, 3, 4, 5 ,  6, 7, 8, 9, 10 ,  11, 12, 13, 14, 15  ;//矩阵初始化
31     vector<int> m = a.printMatrix(matrix);
32     for (auto i : m)//依次打印返回矩阵的值
33         cout << i << " ";
34     cout << endl;
35 
36     return 0;
37 
38 
View Code

参考资料

https://blog.csdn.net/hangsyt108/article/details/80949337

以上是关于剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,的主要内容,如果未能解决你的问题,请参考以下文章

顺时针打印矩阵(剑指offer-19)

剑指offer(19)顺时针打印矩阵

剑指offer 19.顺时针打印矩阵

[剑指offer] 19. 顺时针打印矩阵

剑指offer系列——19.顺时针打印矩阵

剑指offer19 顺时针打印矩阵