Строка “PAYPALISHIRING” написана зигзагообразным узором на заданном количестве строк следующим образом: (возможно, вы захотите отобразить этот узор фиксированным шрифтом для лучшей разборчивости)
А затем прочитайте строку за строкой: “PAHNAPLSIIGYIR”.
Напишите код, который примет строку и произведет это преобразование с учетом количества строк:
string convert(string s, int numRows);
Входные данные: s = “PAYPALISHIRING”, numRows = 3
Результат: “PAHNAPLSIIGYIR”
Входные данные: s = “PAYPALISHIRING”, numRows = 4
Результат: “PINALSIGYAHRPI”
Пояснение:
Входные данные: 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;
}
};