ZigZag Conversion
Bài toán này nếu không có Leetcode hiện case mỗi lần commit sai thì không biết tôi có AC nổi không. Vậy sau này đi phỏng vấn thì thế nào :((
Giả sử trong ví dụ 2, tôi chuyển những đường ZigZag chéo sang cột, thì nhìn sẽ như thế này:
Trên đây là implement bằng Java. Cảm ơn bạn !
The string
"PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H N A P L S I I G Y I R
nd then read line by line:"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:string convert(string s, int numRows);Example 1:Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR"Example 2:Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
P I N
A S G
Y H
P I
A R
L I
Nếu vậy thì mỗi cột có chiều dài tối đa max = numRows*2-2 ký tự. Ở ví dụ trên là 6.
Lại để ý sẽ thấy một quy luật. Đường ZigZag có numRows = 4 (0,1,2,3). Hàng 0 và 3 không bao giờ có sự xuất hiện của phần tử chéo. Còn lại, giả sử như đang ở cột 1, phần tử đầu tiên là A vị trí 1: A(1), phần tử tiếp theo là L(5), phần tử tiespe theo là S(vị trí 7).
Nhận thấy ở đây phẩn tử L(5) là của đường chéo, nó bằng vị trí thứ 7 - 2 . Sau một hồi tìm logic tương tự cho các cột sau, thì ta rút ra là: phần tử chéo chính là: iter+6 - i*i . (Xem code để hiểu hơn).
Trên đây là implement bằng Java. Cảm ơn bạn !
Nhận xét
Đăng nhận xét