ZigZag Conversion
2015-07-19 15:51
316 查看
一、题目内容:The string
written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
And then read line by line:
Write the code that will take a string and make this conversion given a number of rows:
return
二、代码参考:
解法1:
<pre name="code" class="cpp"> string convert(string s, int numRows) {
if(s.empty()||s.size()<=numRows || numRows<=1)
return s;
//
vector<string> vec;
while(s.size()>2*numRows-2)
{
vec.push_back(s.substr(0,2*numRows-2));
s.erase(0,2*numRows-2);
}
if(!s.empty())
vec.push_back(s);
//
int i,j;
string str;
for(i=0;i<numRows;i++)
{
for(j=0;j<vec.size();j++)
{
if(i==0)
{
str.push_back(vec[j][i]);
}
else
{
if(vec[j].size()>i)
str.push_back(vec[j][i]);
if(i<numRows-1 &&vec[j].size()>2*numRows-i-2)
str.push_back(vec[j][2*numRows-i-2]);
}
}
}
return str;
}
解法2:
string convert(string s, int numRows) {
if(s.empty()||s.size()<=numRows ||numRows<=1)
return s;
//
string str;
int i,j;
for(i=0;i<numRows;i++)
{
for(j=0;j<s.size();j+=2*numRows-2)
{
if(i==0)
{
str.push_back(s[j+i]);
}
else if(i==numRows-1)
{
if(j+i<s.size())
str.push_back(s[j+i]);
}
else
{
if(j+i<s.size())
str.push_back(s[j+i]);
if(j+2*numRows-2-i<s.size())
str.push_back(s[j+2*numRows-2-i]);
}
}
}
return str;
}
三、执行结果
"PAYPALISHIRING"is
written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N A P L S I I G Y I R
And then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)should
return
"PAHNAPLSIIGYIR".
二、代码参考:
解法1:
<pre name="code" class="cpp"> string convert(string s, int numRows) {
if(s.empty()||s.size()<=numRows || numRows<=1)
return s;
//
vector<string> vec;
while(s.size()>2*numRows-2)
{
vec.push_back(s.substr(0,2*numRows-2));
s.erase(0,2*numRows-2);
}
if(!s.empty())
vec.push_back(s);
//
int i,j;
string str;
for(i=0;i<numRows;i++)
{
for(j=0;j<vec.size();j++)
{
if(i==0)
{
str.push_back(vec[j][i]);
}
else
{
if(vec[j].size()>i)
str.push_back(vec[j][i]);
if(i<numRows-1 &&vec[j].size()>2*numRows-i-2)
str.push_back(vec[j][2*numRows-i-2]);
}
}
}
return str;
}
解法2:
string convert(string s, int numRows) {
if(s.empty()||s.size()<=numRows ||numRows<=1)
return s;
//
string str;
int i,j;
for(i=0;i<numRows;i++)
{
for(j=0;j<s.size();j+=2*numRows-2)
{
if(i==0)
{
str.push_back(s[j+i]);
}
else if(i==numRows-1)
{
if(j+i<s.size())
str.push_back(s[j+i]);
}
else
{
if(j+i<s.size())
str.push_back(s[j+i]);
if(j+2*numRows-2-i<s.size())
str.push_back(s[j+2*numRows-2-i]);
}
}
}
return str;
}
三、执行结果
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二