1. 程式人生 > 其它 >LeetCode每日一練【6】

LeetCode每日一練【6】

LeetCode每日一練

Zigzag Conversion

/**
 * @param {string} s
 * @param {number} numRows 3
 * @return {string}
 */
const convert = (s, numRows) => {
    const strs = []
    const len = s.length
    const cyclelen = numRows * 2 - 2 // 迴圈長度

    // 1. 只為1行的時候,直接返回結果
    if (numRows === 1) return s

    // 2. 逐行讀取,以行的形式放進臨時陣列中
    for(let row = 0; row < numRows; row++) {
        // 2.1 index + row 每行的字元索引值 共同列
        // 2.2 index + cyclen 每行的字元索引跨度
        for (let index = 0; index + row < len; index += cyclelen) {
            strs.push(s[index + row])
            // 2.3 index + cyclen - row 每行的字元索引值 不同列
            if (row !== 0 && row !== numRows - 1 && index + cyclelen - row < len) {
                strs.push(s[index + cyclelen - row])
            }
        }
    }
    return strs.join('')
};

const s1 = 'PAYPALISHIRING'
const res = convert(s1, 4)
console.log(res) // PINALSIGYAHRPI