ZigZag Conversion
2016-07-12 21:01
423 查看
题目描述:
The string
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
解题思路:
根据zigzag pattern的规律,把每两列当做一个周期,一个周期包含的字符的个数为rows+rows-2。
对于一个周期的内的字符,除了第一行和最后一行包含一个字符以外,其他行都包含两个字符。
根据周期的长度和行号可以求出每一行的每一个字符在源字符串中的位置。
AC代码如下:
class Solution {
public:
string convert(string s, int numRows) {
string ans;
if (numRows == 1){
ans = s;
return ans;
}
int a = numRows * 2 - 2;
int n = s.size();
int j = 0;
while (j*a < n){
ans.push_back(s[j*a]);
j++;
}
for (int i = 1; i < numRows - 1; i++){
j = 0;
while (j*a + i < n){
ans.push_back(s[j*a + i]);
if (j*a + a - i < n){
ans.push_back(s[j*a + a - i]);
}
j++;
}
}
j = 0;
while (j*a + numRows - 1 < n){
ans.push_back(s[j*a + numRows - 1]);
j++;
}
return ans;
}
};
The string
"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".
解题思路:
根据zigzag pattern的规律,把每两列当做一个周期,一个周期包含的字符的个数为rows+rows-2。
对于一个周期的内的字符,除了第一行和最后一行包含一个字符以外,其他行都包含两个字符。
根据周期的长度和行号可以求出每一行的每一个字符在源字符串中的位置。
AC代码如下:
class Solution {
public:
string convert(string s, int numRows) {
string ans;
if (numRows == 1){
ans = s;
return ans;
}
int a = numRows * 2 - 2;
int n = s.size();
int j = 0;
while (j*a < n){
ans.push_back(s[j*a]);
j++;
}
for (int i = 1; i < numRows - 1; i++){
j = 0;
while (j*a + i < n){
ans.push_back(s[j*a + i]);
if (j*a + a - i < n){
ans.push_back(s[j*a + a - i]);
}
j++;
}
}
j = 0;
while (j*a + numRows - 1 < n){
ans.push_back(s[j*a + numRows - 1]);
j++;
}
return ans;
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解