ধরুন স্ট্রিংটি " IWANTTOLEARNCODE" এর মতো। এই স্ট্রিংটি একটি নির্দিষ্ট সংখ্যক সারিতে একটি জিগজ্যাগ পদ্ধতিতে লেখা হয়েছে n বলে। সুতরাং প্যাটার্নটি এইরকম দেখাচ্ছে
| I | ৷ | T | ৷ | A | ৷ | ও |
| W | N | ও | E | আর | C | D |
| A | ৷ | L | ৷ | N | ৷ | E |
যখন আমরা লাইনটি পড়ি - "ITAOWNOERCDALNE"
তাই আমাদের এমন একটি মডিউল তৈরি করতে হবে যা স্ট্রিং এবং সারির সংখ্যা নিয়ে এই ধরনের অপারেশন করতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব
- যখন n =1, তারপর s ফেরত দিন
- n আকারের স্ট্রিং অ্যারের একটি অ্যারে তৈরি করুন
- সারি :=0, এবং নিচে :=সত্য
- আমি 0 থেকে স্ট্রিং-এর আকার - 1
- পরিসরে
- স্ট্রিং arr[সারির] শেষে s[i] ঢোকান
- যদি সারি =b – 1, তারপর নিচে :=মিথ্যা, অন্যথায় যখন সারি =0, তারপর নিচে :=সত্য
- যদি down true হয়, তাহলে সারি 1 দ্বারা বাড়ান, অন্যথায় 1 দ্বারা সারি কমিয়ে দিন
- উত্তর :=ফাঁকা স্ট্রিং
- আমি 0 থেকে n – 1:
- পরিসরে
- উত্তর :=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"