您的位置:首页 > 其它

LeetCode第6题--Z 字形变换

2019-03-26 22:22 363 查看

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。

string convert(string s, int numRows) {
/*从左至右迭代字符串*/
/*if(numRows == 1) return s;
vector<string> vecRows(min(numRows, int(s.length())));
int curRow = 0;
bool goingDown = false;	//判断方向标志位
string strRes = "";
for(char ch : s)
{
vecRows[curRow] += ch;
if(curRow == 0 || curRow == numRows-1) goingDown = !goingDown;
curRow = goingDown ? curRow+1 : curRow-1;
}
for(string str : vecRows)
{
strRes += str;
}
return strRes;*/
/*按行读取*/
if(numRows == 1) return s;
string strRes = "";
int len = s.length();
int cycle = 2 * numRows - 2;	//循环周期为2倍行数减去首尾
for(int i = 0; i < numRows; i++)
{
for(int j = 0; j + i < len; j += cycle)		//每次递进一个周期
{
strRes += s[i+j];       //首尾及中间各行开头索引
if(i != 0 && i != numRows-1 && j+cycle-i < len)
{
strRes += s[j+cycle-i];     //中间各行中间的索引,cycle-1为该周期内对应字符的索引,j为其前面的周期数
}
}
}
return strRes;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: