您的位置:首页 > 其它

和大神们学习每天一题(leetcode)-ZigZag Conversion

2014-11-27 11:10 513 查看
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"
.

class Solution
{
public:
string convert(string s, int nRows)
{
int nsLen = s.length(),nFirst,nStrInd,nBlockLen;
if (nsLen <= nRows || nRows == 1)//判断序列长度是否超过行数或者行数是否为1
return s;
nBlockLen = 2 * nRows - 2;//将整个序列分块,计算每块的长度
nFirst = nBlockLen;//每行中第二个数据距离第一个数据的间隔
int nsBlock = nsLen / nBlockLen + 1;//计算块数
string sResult = "";
for (int nTemp = 0; nTemp < nRows; nTemp++)
{
sResult += s[nTemp];//将Z型中每行第一个符号添加到新建序列尾部
for (int nIndex = 0; nIndex < nsBlock; nIndex++)
{
nStrInd = nTemp + nBlockLen * nIndex + nFirst;
if (nFirst != 0 && nStrInd < nsLen && nStrInd >= 0)
{
sResult += s[nStrInd];
}
nStrInd = nTemp + nBlockLen * (nIndex + 1);
if (nFirst != nBlockLen && nStrInd < nsLen)
{
sResult += s[nStrInd];
}
}
nFirst = nFirst - 2;
}
return sResult;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: