Menu
CoddyTech

Các mẫu thường gặp với mảng 2 chiều

Thuộc phần Logic và luồng chương trình trong hành trình JavaScript của Coddy. Bài học 13 trên 65.

Một số mẫu thường xuất hiện khi làm việc với mảng 2D. Nhận biết các mẫu này có thể giúp bạn giải quyết vấn đề hiệu quả hơn. Dưới đây là một vài mẫu phổ biến:

Duyệt theo đường chéo

Truy cập các phần tử có chỉ số hàng bằng chỉ số cột (matrix[i][i]) để lấy đường chéo chính. Với đường chéo phụ, tổng chỉ số hàng và chỉ số cột bằng kích thước mảng trừ đi 1 (matrix[i][size - 1 - i]).

Ví dụ:

1  2  3
4  5  6
7  8  9

Duyệt qua đường chéo chính (matrix[i][i]): 1, 5, 9
Duyệt qua đường chéo phụ (matrix[i][size - 1 - i]): 3, 5, 7

Duyệt đường viền

Để duyệt các phần tử ở đường viền, bạn giữ một chỉ số cố định (0 hoặc size - 1) trong khi lặp qua chỉ số còn lại.

Để truy cập đường viền trên cùng, bạn lặp qua các cột và giữ chỉ số hàng cố định ở mức 0.

Ví dụ:

1  2  3  4
5  6  7  8
9 10 11 12

các phần tử ở viền: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (tất cả trừ 6 và 7)

challenge icon

Thử thách

Dễ

Tạo một hàm (function) có tên printPatterns, nhận một mảng (array) hai chiều hình vuông gồm các số nguyên (integer) (matrix) làm đầu vào (input) và in ra các mẫu sau:

  1. Đường chéo chính: In ra tất cả phần tử có chỉ số hàng bằng chỉ số cột.
  2. Đường chéo phụ: In ra tất cả phần tử có tổng chỉ số hàng và chỉ số cột bằng kích thước của ma trận trừ 1.
  3. Các cạnh: In ra các phần tử ở cạnh trên, dưới, trái và phải của ma trận.

Đầu ra sẽ trông như sau:

Main Diagonal: 1 6 11 16 
Anti-Diagonal: 4 7 10 13 
Top Border: 1 2 3 4 
Bottom Border: 13 14 15 16 
Left Border: 1 5 9 13 
Right Border: 4 8 12 16

Tự làm thử

function printPatterns(matrix) {
    let mainDiagonal = []
    // TODO: Triển khai
    console.log("Main Diagonal:", mainDiagonal.join(" "));
    
    let antiDiagonal = [];
    // TODO: Triển khai
    console.log("Anti-Diagonal:", antiDiagonal.join(" "));
    
    let topBorder = [];
    // TODO: Triển khai
    console.log("Top Border:", topBorder.join(" "));
    
    let bottomBorder = [];
    // TODO: Triển khai
    console.log("Bottom Border:", bottomBorder.join(" "));
    
    let leftBorder = [];
    // TODO: Triển khai
    console.log("Left Border:", leftBorder.join(" "));
    
    let rightBorder = [];
    // TODO: Triển khai
    console.log("Right Border:", rightBorder.join(" "));
}
// Không viết gì bên ngoài hàm
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch JavaScript online