回环打印
2015-07-29 21:53
274 查看
/************************************************************************* * File Name: Solution.cpp * Description: * Author: Yuji CAO * Mail: caoyuji@sogou-inc.com * Created_Time: 2015-07-29 20时25分33秒 * Last modified: 2015-07-29 20时25分33秒 ************************************************************************/ #include<stdio.h> #include<vector> #include<string> #include<map> #include<set> #include<iostream> using namespace std; vector<int> spiralOrder(vector<vector<int> >& matrix){ int m=matrix.size(); int n=matrix[0].size(); int circleNum=min(n,m)/2; int remainCircleNum=min(n,m)%2; printf("%2d",circleNum); putchar('\n'); printf("%2d",remainCircleNum); putchar('\n'); vector<int> ret; for(int i=0;i<circleNum;++i){ for(int j=i;j<n-i-1;++j){ cout.width(2); cout<<matrix[i][j]; ret.push_back(matrix[i][j]); } cout<<endl; for(int j=i;j<m-i-1;++j){ cout.width(2); cout<<matrix[j][n-i-1]; ret.push_back(matrix[j][n-i-1]); } cout<<endl; for(int j=n-i-1;j>i;--j){ cout.width(2); cout<<matrix[m-i-1][j]; ret.push_back(matrix[m-i-1][j]); } cout<<endl; for(int j=m-i-1;j>i;--j){ cout.width(2); cout<<matrix[j][i]; ret.push_back(matrix[j][i]); } cout<<endl; } if(m<=n&&remainCircleNum==1){ int remainS=circleNum; int remainE=n-circleNum; for(int i=remainS;i<remainE;++i){ ret.push_back(matrix[circleNum][i]); } } if(m>n&&remainCircleNum==1){ int remainS=circleNum; int remainE=m-circleNum; for(int i=remainS;i<remainE;++i){ ret.push_back(matrix[i][circleNum]); } } return ret; } int main(){ int l0[]={1,2,3}; int l1[]={4,5,6}; int l2[]={7,8,9}; int l3[]={10,11,12}; vector<int> ll0(l0,l0+sizeof(l0)/sizeof(l0[0])); vector<int> ll1(l1,l1+sizeof(l1)/sizeof(l1[0])); vector<int> ll2(l2,l2+sizeof(l2)/sizeof(l2[0])); vector<int> ll3(l3,l3+sizeof(l3)/sizeof(l3[0])); vector< vector<int> > dat; dat.push_back(ll0); dat.push_back(ll1); dat.push_back(ll2); dat.push_back(ll3); vector<int> ret=spiralOrder(dat); for(auto ele:ret){ printf("%3d",ele); } putchar('\n'); return 0; }
分析
回环打印的关键是确定圈数,然后逐圈打印;然后处理好边界条件。相关文章推荐
- C#关于使用正则表达式解析字符串
- vector\list\deque的选取
- 无限互联学习心得(三)
- 4K 蓝光影片规范出炉,定名 Ultra HD Blu-ray
- 覆盖实例
- 【事件驱动】【蓝牙控制车锁或电灯】初步方案
- 类中用于比较两对象的方法的原型 及ios_base用法
- php dirname(__FILE__) 获取当前文件的绝对路径
- 编译器实践四 之 FIRST集合,NULLABLE集合,FOLLOW集合
- PTAM编译选项
- JSBinding + SharpKit / 实战:转换 Survival Shooter
- SPOJ AMR10F Cookies Piles
- 1856 More is better
- 感知器算法+C代码
- 指针和引用的区别(More Effective c++ )
- 笔试题做题笔记
- 应用Session变量控制用户登录时间
- MATLAB view函数详解
- ZoomButton与ZoomControls学习笔记
- [iOS]UILable文字如何在顶部