剑指offer:顺时针打印矩阵
2015-09-05 15:16
316 查看
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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 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.
[code]#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; }
相关文章推荐
- js的日期格式化
- 把图片加载到BufferedImage中
- 偶遇问题 - - JavaScript 取消链接默认行为问题
- js变量传参
- 九度OJ 题目1150:Counterfeit Dollar
- Node.js工具集 bower,yeoman,grunt
- CSS列表和一些变化情况
- 欢迎使用CSDN-markdown编辑器
- jquery 获取设置值、添加元素详解
- 常用正则表达式收集
- JQuery - 垂直显示隐藏DIV
- Poj 3294 Life Forms (后缀数组 + 二分 + Hash)
- javascripts学习笔记(五):用js来实现缩略语列表、文献来源链接和快捷键列表。
- node.js 基础学习 express安装使用
- js闭包
- JS中各种构造模式对比
- AngularJS.directive系列:嵌套directive的通讯及scope研究
- 关于firefox的高度 html,body{ height:100%;}
- 纯CSS气泡框实现方法探究
- json序列化与反序列化