#6 ZigZag Conversion

这道题可以认为是一道找规律的题了 Z字形的字母相隔与他所在的层数都有关系
第一层与最后一层都是2(rows-1)(rows为总层数)的关系
其他层数为2
(rows - i)(rows为总层数 i为当前层数)与2(rows-1) - 2(rows - i)即2*(i - 1)交替的关系

    /**
  * @param {string} s
  * @param {number} numRows
  * @return {string}
  */
  var convert = function(s, numRows) {
    //处理特殊情况只有一行
    if(numRows == 1) {
      return s;
    }
    var i = 1,result = [];
    function calrow(row) {
      //计算相对差 只有首行和尾行相对差一直不变
      var all = 2 * (numRows - 1), relative = row == numRows ? all : 2 * (numRows - row);
      //单独处理首尾行
      if(row == 1 || row == numRows) {
        while(s[row - 1] !== undefined) {
          result.push(s[row - 1]);
          row = row + all;
        }
      } else {
        while(s[row - 1] !== undefined) {
          result.push(s[row - 1]);
          row = row + relative;
          //计算交替差
          relative = all - relative;
        }
      }
    }
    计算每一行
    for(;i <= numRows;i++) {
      calrow(i);
    }
    return result.join('');
  };

你可能感兴趣的:(#6 ZigZag Conversion)