সমস্যা বিবরণ
একটি স্কয়ার ম্যাট্রিক্স (২D অ্যারে) দেওয়া আছে। (0,0) পজিশন থেকে শুরু করে স্পায়ারলি (ঘুরাঘুরি) ট্রাভার্স করে ১D অ্যারে বানাতে হবে।
ইনপুট: [[1,2,3],[4,5,6],[7,8,9]]
আউটপুট: [1, 2, 3, 6, 9, 8, 7, 4, 5]
সমাধান
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
const spiral = (arr = []) => {
if (!arr || arr.length === 0) return [];
let startRow = 0, startCol = 0;
let res = [];
let endCol = arr[0].length - 1;
let endRow = arr.length - 1;
while (startRow <= endRow && startCol <= endCol) {
// টপ রো (লেফট টু রাইট)
for (let i = startCol; i <= endCol; i++) res.push(arr[startRow][i]);
startRow++;
// রাইট কলম (টপ টু বটম)
for (let i = startRow; i <= endRow; i++) res.push(arr[i][endCol]);
endCol--;
// বটম রো (রাইট টু লেফট) - যদি রো বাকি থাকে
if (startRow <= endRow) {
for (let i = endCol; i >= startCol; i--) res.push(arr[endRow][i]);
endRow--;
}
// লেফট কলম (বটম টু টপ) - যদি কলম বাকি থাকে
if (startCol <= endCol) {
for (let i = endRow; i >= startRow; i--) res.push(arr[i][startCol]);
startCol++;
}
}
return res;
};
console.log(spiral(arr));
আউটপুট
[ 1, 2, 3, 6, 9, 8, 7, 4, 5 ]
ব্যাখ্যা
- চারটি বাউন্ডারি ভেরিয়েবল:
startRow, endRow, startCol, endCol। - প্রতিটি লেয়ার শেষে বাউন্ডারি আপডেট করা হয় (স্ট্রিক্টলি ইনওয়ার্ড স্পায়ারল)।
- কন্ডিশনাল চেক দিয়ে ডুপ্লিকেট ভিজিট এড়ানো হয়।