Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแปลงซิกแซกใน C++


สมมติว่าสตริงเป็นเหมือน " IWANTTOLEARNCODE" สตริงนี้เขียนในลักษณะซิกแซกตามจำนวนแถวที่กำหนดโดยระบุว่า n ลวดลายก็จะประมาณนี้

ฉัน

T

A

O
W
ไม่
O
E
R
C
D
A

L

ไม่

E

เมื่อเราอ่านบรรทัดเช่น − "ITAOWNOERCDALNE"

ดังนั้นเราจึงต้องสร้างโมดูลหนึ่งโมดูลที่สามารถดำเนินการประเภทนี้ได้โดยใช้สตริงและจำนวนแถว

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้

  • เมื่อ n =1 ให้คืนค่า s
  • สร้างอาร์เรย์ของสตริง arr ขนาด n
  • แถว :=0 และล่าง :=จริง
  • สำหรับฉันในช่วง 0 ถึงขนาดของสตริง – 1
    • ใส่ s[i] ที่ท้ายสตริง arr[row]
    • ถ้าแถว =b – 1 แล้วลง :=เท็จ มิฉะนั้นเมื่อแถว =0 ให้ลง :=จริง
    • ถ้าการลงเป็นจริง ให้เพิ่มแถวขึ้น 1 ไม่เช่นนั้นให้ลดแถวขึ้น 1
  • ตอบ :=สตริงว่าง
  • สำหรับ i ในช่วง 0 ถึง n – 1:
    • ans :=ans + arr[i]
  • คืนสินค้า

ตัวอย่าง(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;
}
main(){
   Solution ob;
   cout << ob.convert("IWANTTOLEARNCODE", 3);
}

อินพุต

"IWANTTOLEARNCODE"
3

ผลลัพธ์

"ITECWNTLANOEAORD"