6.Z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右Z字形排列。
比如输入字符串 “LEETCODEISHIRING” 行数为3时,排列如下:
之后,你的输出需要从左往右逐行读取,产生一个新的字符串,比如:“LCIRETOESIIGEDHN” 。
示例1:
输入:s = “LEETCODEISHIRING”
输出:“LCIRETOESIIGEDHN”
示例2:
输入:s = “LEETCODEISHIRING”
输出:“LDREOEIIECIHNTSG”
解释:
来源:力扣(LeetCode)
链接:link
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:按行存储,从左到右迭代,确定元素应该位于哪一行。
C++源码:
class Solution {
public:
string convert(string s, int numRows)
{
if(numRows == 1 || s.size() == 0)
return s;
int n = min(numRows,(int)s.size());
vector<string> rows(n);
int curRow = 0;
bool goingdown = false;
for(char c : s)
{
if(curRow == 0 || curRow == n - 1)
goingdown = !goingdown;
if(goingdown)
{
rows[curRow] += c;
curRow++;
}
else
{
rows[curRow] += c;
curRow--;
}
}
string result;
for(int i = 0;i < n;i++)
result += rows[i];
return result;
}
};