剑指offer:顺时针打印矩阵
来源:互联网 发布:测试常用的linux命令 编辑:程序博客网 时间:2024/04/30 20:20
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
#include <stdio.h>#include <iostream>#include <vector>using namespace std;class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int columns = 0; int rows = 0; vector<int> vec; int i = 0, j = 0; int cycles = 0; /* 每一圈的左上坐标 */ int left_up_x = 0, left_up_y = 0; /* 每一圈的右下坐标 */ int right_down_x = 0, right_down_y = 0; /* 得到行数 */ rows = matrix.size(); /* 如果二维数组是空的,直接返回 */ if(0 == rows) { return vec; } /* 得到列数 */ columns = matrix[0].size(); /* 得到顺时针的圈数 */ cycles = (rows+1)/2; cycles = ((columns+1)/2) > cycles ? cycles:((columns+1)/2); for(i = 0; i < cycles; i++) { /* 得到边界条件 */ left_up_x = i; left_up_y = i; right_down_x = columns - 1 - i; right_down_y = rows - 1 - i; /* 打印上面的一行 */ for(j = i; j <= right_down_x; j++) { vec.push_back(matrix[i][j]); } /* 打印右边的一列 */ if(right_down_y > left_up_y) { for(j = i+1; j <= right_down_y; j++) { vec.push_back(matrix[j][right_down_x]); } } /* 打印下面的一行 */ if(right_down_x > left_up_x && right_down_y > left_up_y) { for(j = right_down_x - 1; j >= left_up_x; j--) { vec.push_back(matrix[right_down_y][j]); } } /* 打印左边的一列 */ if(right_down_y-1 > left_up_y && right_down_x > left_up_x) { for(j = right_down_y-1; j >= left_up_y+1; j--) { vec.push_back(matrix[j][left_up_x]); } } } return vec; }};int main(){ vector<int> vec(4); vector<int> vec1(1); vector<int> vecReturn(16); Solution s; vector<vector<int> > v; vector<vector<int> > v1; vector<vector<int> > v2; int i = 0, j = 0; for(i = 0; i < 4; i++) { v.push_back(vec); v1.push_back(vec1); } for(i = 0; i < 4; i++) { for(j = 0; j < 4; j++) { v[i][j] = i*4+j +1; } } v1[0][0] = 1; v1[1][0] = 2; v1[2][0] = 3; v1[3][0] = 4; v2.push_back(vec); v2[0][0] = 1; v2[0][1] = 2; v2[0][2] = 3; v2[0][3] = 4; vecReturn = s.printMatrix(v2); for(i = 0; i < 16; i++) { cout << vecReturn[i] << " "; } cout << endl; return 0;}
0 0
- 【剑指offer】顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer--顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 剑指offer 顺时针打印矩阵
- 剑指offer:顺时针打印矩阵
- [剑指offer]顺时针打印矩阵
- 《剑指offer》-顺时针打印矩阵
- 【剑指offer】顺时针打印矩阵
- 剑指offer|顺时针打印矩阵
- 《剑指offer》顺时针打印矩阵
- 剑指Offer:顺时针打印矩阵
- 数据结构——堆
- Theme Section(KMP应用 HDU4763)
- 嵌入式linux程序之调试方法
- 常用数据类型对应字节数
- HDU 1113 Word Amalgamation -- 字符串处理+排序
- 剑指offer:顺时针打印矩阵
- C++中的虚基类
- 软肋
- 正则表达式
- iPhone第四节:UIDatePicker、UIPickerView
- n个骰子的点数
- ok
- Service绑定服务
- UIWindow ,UIView