Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Xoay vòng các phần tử ma trận vuông trong JavaScript


Cần viết hàm JavaScript nhận mảng hai chiều (bắt buộc là ma trận vuông) như sau:

const arr = [ 
    [1, 2, 3], 
    [4, 5, 6], 
    [7, 8, 9] 
];

Hàm xây dựng mảng mới lấy các phần tử xoay tròn từ mảng đầu vào bắt đầu từ vị trí (0, 0) và trả về mảng một chiều đó.

Với mảng này, xoay tròn sẽ như:

const output = [1, 2, 3, 6, 9, 8, 7, 4, 5];

Tạo biến tạm trỏ đến hàng/cột hiện tại, cả đầu và cuối. Cách đó cho phép tăng dần hàng/cột bắt đầu và giảm dần hàng/cột kết thúc theo cách xoay tròn về trung tâm ma trận.

Ví dụ

const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; 
const spiral = (arr = []) => { 
    if (!arr || arr.length === 0) { 
        return []; 
    }; 
    let startRow = 0; 
    let 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));

Kết quả

Kết quả trong console sẽ là:

[ 
    1, 2, 3, 6, 9, 
    8, 7, 4, 5 
]