Cho chuỗi và số hàng n. Viết chuỗi theo đường zig-zag n hàng, sau đó nối các hàng lại. Ví dụ: "STUVWXYZ", n=2 → hàng 1: S U W Y, hàng 2: T V X Z → kết quả "SUWYTVXZ". n=3, "ABCDEFGH" → "AEBDFHCG".
Mô phỏng zig-zag
Mảng string arr[n] lưu từng hàng. Biến row=0, dir=1 (xuống). Duyệt chuỗi: thêm ký tự vào arr[row]. Cập nhật row += dir. Đổi dir khi chạm đỉnh/đáy.
Ví dụ minh họa
#include <bits/stdc++.h>
using namespace std;
void zigzagConcat(string str, int n) {
if (n == 1) { cout << str; return; }
vector rows(n);
int row = 0, dir = 1;
for (char c : str) {
rows[row].push_back(c);
if (row == n-1) dir = -1;
else if (row == 0) dir = 1;
row += dir;
}
for (auto& r : rows) cout << r;
}
int main() {
string str = "ABCDEFGH";
int n = 3;
zigzagConcat(str, n); // AEBDFHCG
return 0;
}
Kết quả
AEBDFHCG