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