【leetcode】ZigZag Conversion

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".
 
ZigZag的意思:
 
一: 2排的时候,1到n的排序
1 3 5 7 9  。。。
2 4 6 8 10 。。。
 
 
二: 3排的时候,1到n的排序
1   5   9  。。。
2 4 6 8 10 。。。
3   7   11 。。。
 
三: 4排的时候,1到n的排序
1    7       13 。。。 
2  6 8    12 14 。。。
3 5  9  11   15 。。。
4    10      16 。。。
 
对于第一行(0)和最后一行(nRows-1),水平方向两个元素的间隔为:2(nRows-1)
对于第i行来说,水平方向的两个元素间隔为2(nRows-1-i),2(i)
 
 
 1 class Solution {
 2 public:
 3     string convert(string s, int nRows) {       
 4         if(nRows==1)
 5         {
 6             return s;
 7         }
 8         string result;
 9         int n=s.length();
10         int step;
11         bool flag;
12         for(int i=0;i)
13         {
14             int j=i;
15             flag=false;
16             while(j<n)
17             {
18                 result.push_back(s[j]);
19                 if(i==0||i==nRows-1)
20                 {
21                     step=2*(nRows-1);
22                 }
23                 else
24                 {
25                     if(flag==false)
26                     {
27                         step=2*(nRows-1-i);
28                         flag=true;
29                     }
30                     else
31                     {
32                         step=2*i;
33                         flag=false;
34                     }
35                 }
36                 j+=step;
37             }
38         }       
39         return result;
40     }
41 };

 

 
 
 

转载于:https://www.cnblogs.com/reachteam/p/4251631.html

你可能感兴趣的:(【leetcode】ZigZag Conversion)