समस्या:
हमें एक JavaScript फ़ंक्शन लिखना है जो एक वर्ग मैट्रिक्स (समान संख्या में पंक्तियों और स्तंभों वाली सरणियों की सरणी) लेता है। फ़ंक्शन को उस सरणी की सरणी के माध्यम से विकर्ण रूप से पार करना चाहिए और तत्वों का एक नया सरणी तैयार करना चाहिए जिसे उसने पार करते समय सामना किया हो।
उदाहरण
यदि फ़ंक्शन का इनपुट है:
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 ]