Cho chuỗi "IWANTTOLEARNCODE". Viết theo kiểu zigzag trên số hàng cho trước (n=3). Mẫu như sau:
| I | T | A | O | |||
| W | N | O | E | R | C | D |
| A | L | N | E |
Đọc theo hàng: "ITAOWNOERCDALNE" (ví dụ output khác với code mẫu).
Tạo module thực hiện thao tác này nhận chuỗi và số hàng.
Giải pháp:
- Nếu n = 1 → trả về s.
- Tạo mảng chuỗi
arrkích thước n. - row := 0, down := true.
- Duyệt i từ 0 đến len-1:
- Thêm s[i] vào cuối arr[row].
- Nếu row = n-1 → down = false; nếu row = 0 → down = true.
- Nếu down → row++; ngược lại row--.
- Ghép các chuỗi trong arr thành ans.
- Trả về ans.
Ví dụ C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string convert(string s, int numRows);
};
string Solution::convert(string a, int b) {
if (b == 1) return a;
string arr[b];
int row = 0;
bool down = true;
for (int i = 0; i < a.size(); i++) {
arr[row].push_back(a[i]);
if (row == b - 1) down = false;
else if (row == 0) down = true;
if (down) row++;
else row--;
}
string ans = "";
for (int i = 0; i < b; i++)
ans += arr[i];
return ans;
}
int main() {
Solution ob;
cout << ob.convert("IWANTTOLEARNCODE", 3);
}
Đầu vào
"IWANTTOLEARNCODE" 3
Đầu ra
"ITECWNTLANOEAORD"