Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển đổi ZigZag trong C++


Cho chuỗi "IWANTTOLEARNCODE". Viết theo kiểu zigzag trên số hàng cho trước (n=3). Mẫu như sau:

ITAO
WNOERCD
ALNE

Đọ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 arr kí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"