**
6.Z字形变换
**
题意
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
复制代码
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
classSolution{publicStringconvert(Strings,intnumRows){// 特殊情况处理:单行或字符串长度小于行数时不需要转换if(numRows==1||numRows>=s.length()){returns;}// 初始化 StringBuilder 数组,每个 StringBuilder 对象代表一行StringBuilder[]rows=newStringBuilder[numRows];for(inti=0;i<numRows;i++){rows[i]=newStringBuilder();}intcurRow=0;// 当前行booleandown=false;// 方向标志,用于控制行的移动// 遍历字符串中的每个字符for(charc:s.toCharArray()){// 将字符添加到当前行rows[curRow].append(c);// 当达到 Zigzag 的顶部或底部时,改变方向if(curRow==0||curRow==numRows-1){down=!down;}// 根据方向更新当前行curRow+=down?1:-1;}// 合并所有行,构建最终的字符串StringBuilderresult=newStringBuilder();for(StringBuilderrow:rows){result.append(row);}returnresult.toString();}}