지그재그 방향

이 함수에는 2개의 매개변수가 있습니다. 문자열과 특정 수의 행입니다.

예를 들어, 'PAYPALISHIRING'은 우리가 얻고자 하는 최종 결과입니다. 그러나 거기에 도달하려면 행 수로 분리하고 행을 결합해야 합니다.

P A H N
A P L S I I G
Y I R

var convert = function(s, numRows) {

    if (s.length < 2 || s.length < numRows){
        return s
    }


이 첫 번째 부분을 보면 길이가 1자일 경우 또는 글자 수가 행 수보다 적으면 해당 글자를 반환하라는 것입니다. 이것은 우리의 기본 상태를 증명합니다.

var convert = function(s, numRows) {

    if (s.length < 2 || s.length < numRows){
        return s
    }

    const rows = new Array(numRows).fill('')
    let count = 0
    let reverse = false;



이제 우리는 성공을 위해 자신을 설정할 것입니다. 거기에 있는 금액 행에 대한 새 배열을 만들고 빈 문자열로 채울 것입니다. numRows = 3으로 여기에 기록된 경우 다음과 같이 표시됩니다.

var convert = function(s, numRows) {

    if (s.length < 2 || s.length < numRows){
        return s
    }

    const rows = new Array(numRows).fill('')


로그 행을 콘솔하면 아래와 같이 됩니다.

['']['']['']



다음으로, 우리는 나중에 문자열을 탐색하고 각 문자를 배열에 놓을 것이기 때문에 카운터 변수 0이 필요합니다. 그런 다음 개수가 0이거나 행 수와 같으면 방향을 변경합니다.

왼쪽에서 오른쪽으로 이동하기 때문에 0에 도달하기 전에 numRows에 도달합니다(첫 번째 배열의 첫 번째 문자는 0이 아니라 1에 있으므로 reverse가 true이면 감소하고 감소합니다). 거짓이면 계속 진행하십시오.

var convert = function(s, numRows) {

    if (s.length < 2 || s.length < numRows){
        return s
    }

    const rows = new Array(numRows).fill('')
    let count = 0
    let reverse = false;

    for (let i = 0; i < s.length; i++) {
    rows[count] += s[i]
    reverse ? count-- : count++
    if (count === 0 || count === numRows - 1) {
       reverse = !reverse
    }
}


여기에서 콘솔 로그를 보면 다음과 같은 일이 발생하는 것을 볼 수 있습니다. 첫 번째 배열에서 현재 문자를 가져오고 세 번째 문자를 칠 때까지 계속 진행합니다. 그런 다음 A, 문자열 2가 다음 문자를 얻도록 방향을 반대로 변경하고 1을 칠 때까지 내려갑니다.

[ 'P', '', '' ]
   -
   1
[ 'P', 'A', '' ]
        -
        2
[ 'P', 'A', 'Y' ]
             -
             3
[ 'P', 'AP', 'Y' ]
        -
        2
[ 'PA', 'AP', 'Y' ]
   -
   1
[ 'PA', 'APL', 'Y' ]
          -
          2
[ 'PA', 'APL', 'YI' ]
                - 
                3
[ 'PA', 'APLS', 'YI' ]
           -
           2 
[ 'PAH', 'APLS', 'YI' ]
    -
    1



계속해서 계속 진행하지만 한쪽 끝을 치면 지그재그로 움직이는 것을 볼 수 있습니다. 우리가 다른 방향으로 치면 지그합니다. 남은 것은 모든 행을 결합하여 반환하는 것뿐입니다.

var convert = function(s, numRows) {

    if (s.length < 2 || s.length < numRows){
        return s
    }

    const rows = new Array(numRows).fill('')
    let count = 0
    let reverse = false;

    for (let i = 0; i < s.length; i++) {
        let current = s[i]
        rows[count] += current
        console.log(rows)
        reverse ? count-- : count++
        if (count === 0 || count === numRows - 1) {
            reverse = !reverse
        }
    }
   let joined = rows.join('')
   console.log(joined)
};

좋은 웹페이지 즐겨찾기