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)this
P A H N A P L S I I G Y I R
And 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 text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".spa
假設咱們輸入的就是上面的字符串,在numRows取不一樣值的時候,你們看我用Excel作的簡易的圖:code
看完圖應該就明白了這個題目究竟是什麼意思,這個題的難點在於找規律,只要找到了規律,解決這個題並不難.
規律以下:blog
依照上面規律,代碼以下ip
/** * @param {string} s * @param {number} numRows * @return {string} */ var convert = function(s, numRows) { if (numRows <= 1) return s; let res = ''; let len = s.length; let dis = numRows*2 - 2; /* first row */ for (let i = 0; i < len; i+=dis) { res += s.charAt(i); } /* middle */ for (let i = 1; i < numRows-1; i++) { let tempDis = 2*i; for (let j = i; j < len; j += tempDis) { res += s.charAt(j); tempDis = dis - tempDis; } } /* last row */ for (let i = numRows-1; i< len; i += dis) { res += s.charAt(i); } return res; };