leetcode6 ZigZag Conversion
2015-09-08 20:47
453 查看
这个leetcode上的题目写的就是太简单了,就是简单一句话加上一个测试用例就完事了,不严谨,总是理解错,这个让我很闹心啊.
大概题意就是,将字符串排列成连续的折线,就像是很多个N连在一起那种,之后再按行相加然后返回就OK了.
仔细观察图形可以发现,第一行和最后一行是可直接循环相加的,不需要加中间的那些字符,字符串的循环周期为
crcle = (numRows-1)*2;
比如说举一个numRows为6的例子,crcle就是10,第一行和最后一行直接以10为周期循环相加就OK了,但是中间的四行就必须得每次循环加两个字符,一个是循环周期中的字符,另外一个是中间斜线上的字符,他们中间有对应的规律就是1-9,2-8,
3-7,4-6,其实就是crcle-i,每次循环的时候都要加crcle那么就是k*crcle+crcle-1(k=0,1,2,3,4......).我们只需将表达式变成这样就OK了.
代码:
大概题意就是,将字符串排列成连续的折线,就像是很多个N连在一起那种,之后再按行相加然后返回就OK了.
仔细观察图形可以发现,第一行和最后一行是可直接循环相加的,不需要加中间的那些字符,字符串的循环周期为
crcle = (numRows-1)*2;
比如说举一个numRows为6的例子,crcle就是10,第一行和最后一行直接以10为周期循环相加就OK了,但是中间的四行就必须得每次循环加两个字符,一个是循环周期中的字符,另外一个是中间斜线上的字符,他们中间有对应的规律就是1-9,2-8,
3-7,4-6,其实就是crcle-i,每次循环的时候都要加crcle那么就是k*crcle+crcle-1(k=0,1,2,3,4......).我们只需将表达式变成这样就OK了.
代码:
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; class Solution { public: string convert(string s, int numRows) { int i,j,len; int crcle; string strtemp = ""; len = s.capacity(); crcle = numRows+1; if(numRows == 1 || numRows >= len) { return s; } crcle = (numRows-1)*2; for(i=0;i<numRows;i++) { for(j=i;j<len;j+=crcle) { strtemp+=s[j]; if(i==0||i==numRows-1) continue; else if((j+crcle-(2*i))<len) strtemp+=s[j+crcle-(2*i)]; } } return strtemp; } }; int main() { string result = "PAHNAPLSIIGYIR"; string s= "PAYPALISHIRING"; int num = 3; Solution test; cout<<result<<endl; result = test.convert(s,num); cout<<result<<endl; return 0; }
相关文章推荐
- nyoj 115 城市平乱(dijkstra)
- Java 创建对象时的初始化过程
- 关于sql数据表中查找重复记录的技巧
- HDU4409-LCA模拟
- zabbix------key的创建
- 2014年7月华为校招机试真题3
- Servlet以及jsp异常的处理
- 奇怪的连接错误 LNK1181: 无法打开输入文件“,5.01”
- protocol buffer动态解析
- LRU算法:商品浏览历史排序
- Sum Root to Leaf Numbers
- Android中数据存储——ContentProvider存储数据
- Servlet3文件上传
- Android SQLite数据库应用之Prepared Statement、事务操作
- 网络通讯基础
- Java_jdbc 基础笔记之八 数据库连接(写一个查询Student对象的方法)
- SVN安装---本机安装(1)
- 1040. 有几个PAT(25)
- java 图的拓扑排序(利用Vector存储)
- android广播broadcast详解