Leetcode - Medium - 6. Zigzag Conversion - Javascript
6. Zigzag Conversion
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
And then read line by line: "PAHNAPLSIIGYIR"
/** * @param {string} s * @param {number} numRows * @return {string} */ var convert = function(s, numRows) { const stringList = []; const stringLen = s.length; const modNum = (numRows - 1) * 2; const revertModNum = numRows - 1; if (modNum <= 1) { return s;}; for (let i = 0; i < stringLen; i++) { const index = i % modNum; let arrayIndex; if (index > revertModNum) { arrayIndex = revertModNum - (index%revertModNum); } else { arrayIndex = index; } stringList[arrayIndex] = stringList[arrayIndex] ? stringList[arrayIndex] + s[i] : s[i]; } return stringList.join(''); };
執行成果:
高手解題:
/** * @param {string} s * @param {number} numRows * @return {string} */ var convert = function(s, numRows) { if(numRows === 1) { return s; } const result = new Array(numRows).fill(''); let i = 0; let count = 0; let dir = false; while(i < s.length) { if(i % (numRows-1) === 0) dir = !dir result[count] += s[i]; dir ? count++ : count-- i++; } return result.join(''); };透過取餘數為零時反轉 dir 指標並針對對應的 couter 寫入對應的 array string減少 mod 計算數量與複雜度
0 意見 :
張貼留言