ধরুন আমাদের কাছে M x N উপাদানগুলির একটি ম্যাট্রিক্স রয়েছে, আমাদের ম্যাট্রিক্সের সমস্ত উপাদানগুলিকে তির্যক ক্রমে খুঁজে বের করতে হবে। তাই ম্যাট্রিক্স যদি −
এর মত হয়| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
আউটপুট হবে [1,2,4,7,5,3,6,8,9]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি অ্যারে রেট তৈরি করুন, সারি সেট করুন :=0 এবং col :=0, n :=সারি গণনা, m :=কল গণনা, ডাউন :=মিথ্যা
- আমি 0 থেকে n – 1
- পরিসরে
- x :=i, y :=0
- একটি অ্যারে টেম্প তৈরি করুন
- যখন x>=0 এবং y
- টেম্পে ম্যাট্রিক্স[x,y] ঢোকান এবং x 1 কমিয়ে y বাড়ান
- যদি ডাউন সত্য হয়, তাহলে টেম্প অ্যারেটি বিপরীত করুন
- আমি রেঞ্জ 0 থেকে টেম্প - 1 এর আকারের জন্য, রেটে টেম্প[i] ঢোকান
- নিচে :=নিচের বিপরীত
- পরিসরে
- x :=n – 1, y :=1, একটি অ্যারে টেম্প তৈরি করুন
- যখন x>=0 এবং y
- টেম্পে ম্যাট্রিক্স[x, y] ঢোকান এবং x 1 কমিয়ে y বাড়ান
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector <int> ret;
int row = 0;
int col = 0;
int n = matrix.size();
int m = n? matrix[0].size() : 0;
bool down = false;
for(int i = 0; i < n; i++){
int x = i;
int y = 0;
vector <int> temp;
while(x >= 0 && y < m){
temp.push_back(matrix[x][y]);
x--;
y++;
}
if(down) reverse(temp.begin(), temp.end());
for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
down = !down;
}
for(int i = 1; i < m; i++){
int x = n - 1;
int y = i;
vector <int> temp;
while(x >= 0 && y < m){
temp.push_back(matrix[x][y]);
x--;
y++;
}
if(down) reverse(temp.begin(), temp.end());
for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
down = !down;
}
return ret;
}
};
main(){
vector<vector<int>> v = {{1,2,3},{4,5,6},{7,8,9}};
Solution ob;
print_vector(ob.findDiagonalOrder(v));
} ইনপুট
[[1,2,3],[4,5,6],[7,8,9]]
আউটপুট
[1, 2, 4, 7, 5, 3, 6, 8, 9, ]