ZigZag Conversion – LeetCode JavaScript

ZigZag Conversion – LeetCode JavaScript
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

題目

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”
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”.


題目解釋

假設我們輸入的就是上面的字串,在numRows取不同值的時候,大家看我用Excel做的簡易的圖:


看完圖應該就明白了這個題目到底是什麼意思,這個題的難點在於找規律,只要找到了規律,解決這個題並不難.
規律如下:

第一行或者最後一行,元素之間的間隔(distance)為
2 * nRows – 2;
中間部分間隔分別是:
distace – 2i, 2 i, distance – 2i, 2i…

依照上面規律,程式碼如下

/**
* @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;
};

相關文章

程式語言 最新文章