সমস্যা:
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি স্কোয়ার ম্যাট্রিক্স (সমান সারি ও কলাম) ইনপুট হিসেবে নেবে। ফাংশনটি ম্যাট্রিক্সটিকে ডায়াগোনালি ট্রাভার্স করবে এবং এলিমেন্টগুলো ভিজিট করার ক্রম অনুযায়ী একটি নতুন অ্যারে তৈরি করবে।
উদাহরণ:
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=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 ]