498. Diagonal Traverse
- Tags: Mảng, Ma trận, Mô phỏng
- Độ khó: Trung bình
Tóm tắt đề bài
Mô tả: Cho một ma trận có kích thước .
Yêu cầu: Trả về một mảng chứa tất cả các phần tử trong ma trận theo thứ tự duyệt đường chéo.
Giới hạn:
- .
- .
- .
- .
- .
Ví dụ:
- Ví dụ 1:
- Ví dụ 2:
Ý tưởng giải quyết
Ý tưởng 1: Tìm quy luật + Xử lý biên
Vấn đề chính của bài toán này là “Tìm quy luật” và “Xử lý biên”.
Tìm quy luật:
- Khi “chỉ số hàng + chỉ số cột” là số chẵn, di chuyển theo hướng từ dưới lên trên. Có thể ghi là hướng “Trên phải” , tức là giảm chỉ số hàng đi , tăng chỉ số cột đi .
- Khi “chỉ số hàng + chỉ số cột” là số lẻ, di chuyển theo hướng từ trên xuống dưới. Có thể ghi là hướng “Dưới trái” , tức là tăng chỉ số hàng đi , giảm chỉ số cột đi .
Xử lý biên:
- Khi di chuyển theo hướng “Trên phải”:
- Nếu đang ở cột cuối cùng, di chuyển xuống dưới, tức là
x += 1
. - Nếu đang ở hàng đầu tiên, di chuyển sang phải, tức là
y += 1
. - Trường hợp còn lại di chuyển theo hướng “Trên phải”, tức là
x -= 1
,y += 1
.
- Nếu đang ở cột cuối cùng, di chuyển xuống dưới, tức là
- Khi di chuyển theo hướng “Dưới trái”:
- Nếu đang ở hàng cuối cùng, di chuyển sang phải, tức là
y += 1
. - Nếu đang ở cột đầu tiên, di chuyển xuống dưới, tức là
x += 1
. - Trường hợp còn lại di chuyển theo hướng “Dưới trái”, tức là
x += 1
,y -= 1
.
- Nếu đang ở hàng cuối cùng, di chuyển sang phải, tức là
Ý tưởng 1: Cài đặt
Ý tưởng 1: Phân tích độ phức tạp
- Độ phức tạp thời gian: . Trong đó và lần lượt là số hàng và số cột của ma trận.
- Độ phức tạp không gian: . Nếu tính cả không gian sử dụng cho mảng kết quả, thì độ phức tạp không gian là . Nếu chỉ tính không gian sử dụng bộ nhớ phụ, thì độ phức tạp không gian là .