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

 

注意如果用push_back的话会超内存,因为每次push_back后如果空间不够则新空间会是原来的两倍,为了避免这种情况还是直接定义长度为len的字符串吧。题目根本就没说清楚嘛, 下面是n=4时的结果:

P     I     N

A   L S   I G

Y A   H R
P I

 1 class Solution {

 2 public:

 3     string convert(string s, int nRows) {

 4         int len = s.length();

 5         if (len <= nRows || nRows == 1) return s;

 6         int steps;

 7         string res;

 8         res.resize(len);

 9         int idx = 0;

10         for (int i = 0; i < nRows; ++i) {

11             if (i == nRows - 1) steps = 2 * (nRows - 1);

12             else steps = 2 * (nRows - i - 1);

13             

14             if (i == 0 || i == nRows - 1) {

15                 for (int j = i; j < len; j += steps) {

16                     res[idx] = s[j];

17                     ++idx;

18                 }

19             } else {

20                 bool flag = true;

21                 for (int j = i; j < len;) {

22                     res[idx] = s[j];

23                     ++idx;

24                     if (flag) j += steps;

25                     else j += (2 * (nRows - 1) - steps);

26                     flag = !flag;

27                 }

28             }

29         }

30         return res;

31     }

32 };

 

 

你可能感兴趣的:(conversion)