6.z字型变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
/*class Solution {
public String convert(String s, int numRows) {
if(numRows==1) return s;
if(numRows==2)
String z="";
for(int i=0;i<numRows;i+=(2*numRows)-2)
{
}
for(int i=1;i<numRows-1;i++)
{
for(int j=i;j<s.length();j+=(2*numRows)-2)
z+=s.charAt(j)
}
for(int i=numRows-1;i<numRows;i+=(2*numRows)-2)
{
}
}
}*/
class Solution {
public String convert(String s, int numRows) {
if(numRows ==1 ) return s;
List<StringBuilder> rows = new ArrayList<>();
for(int i=0;i<Math.min(numRows,s.length());i++)
rows.add(new StringBuilder());
int curRow = 0;
boolean goingDown = false;
for(char c : s.toCharArray()){
rows.get(curRow).append(c);
if(curRow ==0 || curRow == numRows-1) goingDown = !goingDown;
curRow += goingDown? 1:-1;
}
StringBuilder ret = new StringBuilder();
for(StringBuilder row: rows ) ret.append(row);
return ret.toString();
}
}