मान लीजिए हमारे पास m x n आकार का एक 2D ग्रिड है। हमारे पास एक और वेरिएबल k है। हमें ग्रिड को k बार शिफ्ट करना है। शिफ्ट ऑपरेशन निम्नानुसार होगा
ग्रिड G[i, j] पर तत्व G[i, j + 1] पर चला जाता है
ग्रिड G[i, n - 1] पर तत्व G[i + 1, 0] पर चला जाता है
ग्रिड G[m - 1, n - 1] पर तत्व G[0, 0] पर चला जाता है
तो यदि ग्रिड इस तरह है -
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
आउटपुट होगा -
| 9 | 1 | 2 |
| 3 | 4 | 5 |
| 6 | 7 | 8 |
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
शिफ्ट ऑपरेशन मैट्रिक्स को इनपुट के रूप में लेगा
n = पंक्तियों की संख्या, m := कॉलम की संख्या, x := निचला दायां तत्व
i := n - 1 से 0 तक नीचे
j := m - 1 से 0 तक नीचे
यदि j = 0 और i > 0, तो G[i, j] := G[i - 1, m - 1]
अन्यथा यदि j > 0, तो G[i, j] := G[i, j - 1]
G[0, 0] := x
निम्न नियम द्वारा शिफ्ट ऑपरेशन कॉल करें -
जब तक k 0 नहीं है
ग्रिड G को शिफ्ट करें
k को 1 से घटाएं
ग्रिड G लौटाएं
उदाहरण (C++)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<int> > v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] <<", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: void shift(vector<vector<int>>& grid){ int n = grid.size(); int m = grid[0].size(); int x = grid[n-1][m-1]; for(int i = n-1; i>=0; i--){ for(int j = m-1;j>=0;j--){ if(j == 0 && i>0){ grid[i][j] = grid[i-1][m-1]; } else if(j>0){ grid[i][j] = grid[i][j-1]; } } } grid[0][0] = x; } vector<vector<int>> shiftGrid(vector<vector<int>>& g, int k) { while(k--){ shift(g); } return g; } }; main(){ Solution ob; vector<vector<int>> mat = {{1,2,3},{4,5,6},{7,8,9}}; print_vector(ob.shiftGrid(mat, 1)); }इनपुट
{{1,2,3},{4,5,6},{7,8,9}} 1आउटपुट
[[9, 1, 2, ],[3, 4, 5, ],[6, 7, 8, ],]