สมมติว่าสตริงเป็นเหมือน " 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"