ZigZag Conversion
来源:互联网 发布:网络黑白 花无涯下载 编辑:程序博客网 时间:2024/04/30 05:34
第一种办法,简单粗暴的排着算,要求几行就设几个vector,然后就按照规则行数先加后减,依次加到vector里:
class Solution {public: string convert(string s, int numRows) { vector<char> a[numRows]; string str; int n=s.size(); int l=0; int flag; for(int i=0;i<n;i++) { if(l==0) { flag=0; } if(l==numRows-1) { flag=1; } a[l].push_back(s[i]); if(flag==0&&l+1<numRows) { l+=1; } if(flag==1&&l-1>=0) { l-=1; } } for(int j=0;j<numRows;j++) { int n1=a[j].size(); for(int k=0;k<n1;k++) { str+=a[j][k]; } } return str; }};
第二种,算一下,具体每行的每个位置的坐标情况,形状像正弦曲线,第一行最后一行间距是均匀的8(4*(5-1)),第二行是6(8-2*1),2(2*1),第三行是4(8-2*2),4(2*2),按照这个规律编码即可。
0 8 16
1 7 9 15
2 6 10 14
3 5 11 13
4 12
class Solution {public: string convert(string s, int numRows) { string re; int n=s.size(); if(numRows==1||n==1) { re=s; } else { for(int i=0;i<numRows;i++) { int b=i; if(i==0||i==(numRows-1)) { while(b<n) { re+=s[b]; b+=2*(numRows-1); } } else { int b2=i+2*(numRows-1-i); while(b<n) { re+=s[b]; if(b2<n) { re+=s[b2]; } b+=2*(numRows-1); b2=b+2*(numRows-1-i); } } } } return re; }};
而且这个会快一些......
0 0
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- Zigzag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- ZigZag Conversion
- Django 如何表达 one-to-many 关系
- 丢失索引表空间恢复
- web第一课
- 简明python教程 第5章
- svg初学
- ZigZag Conversion
- 基因,我的神啊
- 欢迎使用CSDN-markdown编辑器
- C/S架构
- [canvas系列]addHitRegion(options)讲解
- 关于硬盘扇区的基本知识
- HDFS中SecondaryNameNode合并fsimage和edit log操作
- 不同版本下密码文件丢失解决流程
- Spring MVC之@RequestMapping 详解