Computer >> Máy Tính >  >> Lập trình >> C ++

Chuyển đổi ZigZag trong C ++


Giả sử chuỗi giống như "IWANTTOLEARNCODE". Chuỗi này được viết theo đường ngoằn ngoèo trên một số hàng nhất định nói n. Vì vậy, mẫu trông như thế này

Tôi

T

A

O
W
N
O
E
R
C
D
A

L

N

E

Khi chúng tôi đọc dòng như - "ITAOWNOERCDALNE"

Vì vậy, chúng tôi phải tạo một mô-đun có thể thực hiện loại hoạt động này bằng cách lấy chuỗi và số hàng.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau

  • khi n =1, sau đó trả về s
  • tạo một mảng chuỗi arr có kích thước n
  • row:=0 và down:=true
  • cho tôi trong phạm vi từ 0 đến kích thước của chuỗi - 1
    • chèn s [i] vào cuối chuỗi arr [row]
    • nếu row =b - 1 thì xuống:=false, ngược lại khi row =0 thì xuống:=true
    • nếu giảm là đúng, thì hãy tăng hàng lên 1, nếu không thì giảm hàng xuống 1
  • ans:=chuỗi trống
  • cho tôi trong phạm vi từ 0 đến n - 1:
    • ans:=ans + arr [i]
  • trả lại ans

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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;
}
main(){
   Solution ob;
   cout << ob.convert("IWANTTOLEARNCODE", 3);
}

Đầu vào

"IWANTTOLEARNCODE"
3

Đầu ra

"ITECWNTLANOEAORD"