力扣,Z字形变换,js解法

34 阅读1分钟

题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

这个方法运用了找规律的方式解决。

源码:

var convert = function(s, numRows) {
  if(numRows === 1) return s;
  let ans = [];
  let groupNum = numRows*2 - 2;
  for(let i=0; i<numRows; i++){
    if(i === 0 || i === numRows-1){
      // 第一行和最后一行特殊处理
      for(let j=i; j<s.length; j+=groupNum){
        ans.push(s[j]);
      }
    } else {
      let k = groupNum - 2 * (i - 0);
      for(let j=i; j<s.length; j+=groupNum){
        ans.push(s[j]);
        ans.push(s[j + k]);
      }
    }
  }
  return ans.join("");
}

结果:

image.png