Написано: 25.02.2023

6. Зигзагное преобразование (Zigzag Conversion)

medium

Задание.

Строка “PAYPALISHIRING” написана зигзагообразным узором на заданном количестве строк следующим образом: (возможно, вы захотите отобразить этот узор фиксированным шрифтом для лучшей разборчивости)

LeetCode-000006

А затем прочитайте строку за строкой: “PAHNAPLSIIGYIR”.

Напишите код, который примет строку и произведет это преобразование с учетом количества строк:

string convert(string s, int numRows);

Пример 1.

Входные данные: s = “PAYPALISHIRING”, numRows = 3

Результат: “PAHNAPLSIIGYIR”

Пример 2.

Входные данные: s = “PAYPALISHIRING”, numRows = 4

Результат: “PINALSIGYAHRPI”

Пояснение:

LeetCode-000006

Пример 3.

Входные данные: s = “A”, numRows = 1

Результат: “A”

Решение.

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1) return s;
        vector<string> rows(min((int)s.size(), numRows));
        int down = -1;
        int row = 0;
        for (int i = 0; i < s.size(); ++ i) {
            rows[row] += s[i];
            if ((row == 0) || (row == numRows - 1)) {
                down *= -1;
            }
            row += down;
        }
        string ss = "";
        for (const auto &n: rows) {
            ss += n;
        }
        return ss;
    }
};