समस्या:
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता होती है जो एक वर्ग मैट्रिक्स (समान संख्या में पंक्तियों और स्तंभों वाले सरणियों की एक सरणी) लेता है। फ़ंक्शन को सरणी के उस सरणी के माध्यम से तिरछे ट्रैवर्स करना चाहिए और उस क्रम में रखे गए तत्वों की एक नई सरणी तैयार करनी चाहिए जो ट्रैवर्सिंग के दौरान सामने आती है।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है -
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
तब आउटपुट होना चाहिए -
const output = [1, 2, 4, 7, 5, 3, 6, 8, 9];
उदाहरण
इसके लिए कोड होगा -
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; const findDiagonalOrder = (arr = []) => { if(!arr.length){ return []; }; let ind = 0; let colBegin = 0, rowBegin = 0; let rowMax = arr.length, colMax = arr[0].length; const res = [], stack = []; while(rowBegin< rowMax || colBegin<colMax) { for(let row = rowBegin, col = colBegin; row < rowMax && col >=0 ; row++,col--){ if(ind%2 === 0){ stack.push((arr[row][col])); }else{ res.push(arr[row][col]); }; }; ind++; while(stack.length){ res.push(stack.pop()); }; colBegin++ if(colBegin> colMax-1 && rowBegin < rowMax){ colBegin = colMax-1 rowBegin++ } }; return res }; console.log(findDiagonalOrder(arr));
कोड स्पष्टीकरण:
हमने जो कदम उठाए वे हैं -
-
शुरुआती बिंदु का ट्रैक रखते हुए एक दिशा में ट्रैवर्स किया गया।
-
यदि अनुक्रमणिका सम है, तो हम एक स्टैक पर पुश करेंगे और एक बार जब यह विकर्ण के अंत तक पहुंच जाएगा, तो हमारे आउटपुट सरणी में पॉप को जोड़ देगा।
-
जैसे-जैसे हम अगले विकर्ण की ओर बढ़ते हैं, हम अनुक्रमणिका बढ़ाते रहते हैं।
-
हम कॉलम स्टार्ट इंडेक्स को तब तक बढ़ाते हैं जब तक कि यह अंत तक नहीं पहुंच जाता, क्योंकि यह अगले पुनरावृत्तियों के लिए इसे अंतिम इंडेक्स पर रोक दिया जाएगा और हम इस बिंदु से बढ़ते हुए रो स्टार्ट इंडेक्स को बढ़ाएंगे।
आउटपुट
और कंसोल में आउटपुट होगा -
[ 1, 2, 4, 7, 5, 3, 6, 8, 9 ]