LeetCode题解(6)--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".

 

 思路:

把字符串先用二维矩阵存下来,然后先行后列存储到新string即可。注意Z形稀疏矩阵可以压缩存储,使空间复制度还是O(n)。AC代码如下:

 

 1 class Solution {

 2 public:

 3     string convert(string s, int numRows) {

 4         if(s==""|| numRows==1){

 5             return s;

 6         }

 7         int residual,i_col,n=s.size();

 8         int circle=2*numRows-2,count=0;

 9         int col=(n-1)/(numRows-1)+1;

10         char tmp[numRows][col];

11         string res;

12         memset(tmp, 0, sizeof(tmp));

13         for(int i=0;i<n;i++){

14             residual=i%circle;

15             i_col=2*(i/circle)+(i%circle)/numRows;

16             if(residual<numRows)

17                 tmp[residual][i_col]=s[i];

18             else

19                 tmp[numRows-residual%numRows-2][i_col]=s[i];

20         }

21         for(int i=0;i<numRows;i++)

22             for(int j=0;j<col;j++)

23                 if(tmp[i][j]!='\0')

24                     res+=tmp[i][j];

25         return res;

26     }

27 };

 

你可能感兴趣的:(conversion)