将字符串 “PAYPALISHIRING” 以Z字形排列成给定的行数:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:”PAHNAPLSIIGYIR”
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = “PAYPALISHIRING”, numRows = 3
输出: “PAHNAPLSIIGYIR”
示例 2:
输入: s = “PAYPALISHIRING”, numRows = 4
输出: “PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I
每numRows-1个一组,循环进行向下和向右上移动
var convert = function(s, numRows) {
if(numRows==1||s.length<=numRows){
return s;
}
var dd=[];
//定义储存的二维数组
for(var i=0;i<numRows;i++){
dd[i]=new Array();
}
var dm=numRows-1;
var tt=0;
var m=0;
var n=0;
for(var i=0;i<s.length;i++){
//向下移动
if(dm>0){
dd[m][n]=s[i];
m++;
dm--;
if(dm==0){tt=numRows-1;}
}
//向右上移动
else if(tt>0){
dd[m][n]=s[i];
m--;
n++;
tt--;
if(tt==0){dm=numRows-1;}
}
}
var ff=[];
//合并每一行
for(var i=0;i<dd.length;i++){
ff.push(dd[i].join(""));
}
//合并所有行
return ff.join("");
}