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 s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P     I    N
A   L S  I G
Y A   H R
P     I

解答

根据mod分情况讨论。

class Solution {
public:
    string convert(string s, int numRows) {
        int len = s.length();
        if (numRows == 1) {
            return s;
        }
        string news = "";
        for (int i = 0; i < len; i++) {
            if (i % (2 * (numRows - 1)) == 0) {
                news.push_back(s[i]);
            }
        }
        for (int j = 1; j <= (numRows - 2); j++) {
            for (int i = 0; i < len; i++) {
                if (i % (2 * (numRows - 1)) == j || i % (2 * (numRows - 1)) == (2 * (numRows - 1) - j)) {
                    news.push_back(s[i]);
                }
            }
        }
        for (int i = 0; i < len; i++) {
            if (i % (2 * (numRows - 1)) != 0 && i % (numRows - 1) == 0) {
                news.push_back(s[i]);
            }
        }
        return news;
    }
};

题外话

可以一次循环搞定的,懒得改了,击败了9.02%的代码可还行哈哈哈。(待续)

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