मान लीजिए कि हमारे पास एम एक्स एन तत्वों का एक मैट्रिक्स है, हमें मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में खोजना होगा। तो अगर मैट्रिक्स की तरह है -
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
आउटपुट होगा [1,2,4,7,5,3,6,8,9]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक सरणी रिट बनाएं, पंक्ति सेट करें:=0 और कॉलम:=0, एन:=पंक्ति गणना, एम:=कॉल गिनती, नीचे:=झूठा
- मैं के लिए 0 से n - 1 की सीमा में
- x :=i, y :=0
- एक सरणी अस्थायी बनाएं
- जबकि x>=0 और y
- मैट्रिक्स[x,y] को टेम्परेचर में डालें, और x को 1 से घटाएं और y को 1 से बढ़ाएं
- यदि नीचे सही है, तो अस्थायी सरणी को उलट दें
- मैं के लिए 0 से लेकर अस्थायी -1 के आकार तक के लिए, अस्थायी [i] को रिट में डालें
- नीचे :=नीचे का उलटा
- x:=n – 1, y:=1, एक सरणी अस्थायी बनाएं
- जबकि x>=0 और y
- मैट्रिक्स[x, y] को टेम्परेचर में डालें और x को 1 से घटाएं और y को 1 से बढ़ाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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, ]