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


这道题建立nRows个string存储在vector中,然后便利string每个字符,将字符加入到指向的vector中的string的末尾,指向位置先正向便利,再逆向遍历,循环直至传入的string末尾。

string convert(string s, int numRows) {
        if (numRows < 2) return s;
        vector v;
        while (v.size() < numRows) {
            string str;
            v.push_back(str);
        }
        bool backward = true;
        int i = 0;
        int currentString = 0;
        while (i < s.length()) {
            v[currentString] += (s[i++]);
            if (currentString == v.size() - 1) {
                backward = false;
            } else if (currentString == 0) {
                backward = true;
            }
            currentString = backward ? (currentString + 1) : (currentString - 1);
        }
        string res;
        for (int j = 0; j < v.size(); ++j) {
            res.append(v[j]);
        }
        return res;
    }

你可能感兴趣的:(LeetCode #6 : ZigZag Conversion)