# LeetCode:ZigZag Conversion

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".

(1)第一行和最后一行下标间隔都是interval = n*2-2 = 8 ;                                                   本文地址

(2)中间行的间隔是周期性的,第i行的间隔是: interval–2*i,  2*i,  interval–2*i, 2*i, interval–2*i, 2*i, …

class Solution {
public:
string convert(string s, int nRows) {
if(nRows == 1)return s;
int len = s.size(), k = 0, interval = (nRows<<1)-2;
string res(len, ' ');
for(int j = 0; j < len ; j += interval)//处理第一行
res[k++] = s[j];
for(int i = 1; i < nRows-1; i++)//处理中间行
{
int inter = (i<<1);
for(int j = i; j < len; j += inter)
{
res[k++] = s[j];
inter = interval - inter;
}
}
for(int j = nRows-1; j < len ; j += interval)//处理最后一行
res[k++] = s[j];
return res;
}
};

【版权声明】转载请注明出处：http://www.cnblogs.com/TenosDoIt/p/3738693.html

posted @ 2014-05-20 13:19  tenos  阅读(6183)  评论(0编辑  收藏  举报