思路:总共n行,新建n个StringBuilder,依次从上到下给每个StringBuilder赋值,每两列一组,前面一列先从上到下依次赋值,后面一列从倒数第二行依次向上赋值到第二行结束。最后将n个字符串相连。
时间复杂度:O(n),n是字符串长度。
class Solution {
public String convert(String s, int numRows) {
StringBuilder[] sb=new StringBuilder[numRows];
for(int i=0;i<numRows;i++){
sb[i]=new StringBuilder();
}
int index=0;
while(index<s.length()){
for(int i=0;i<numRows && index<s.length() ; i++){
sb[i].append(s.charAt(index));//StringBuilder添加字符
index++;
}
for(int j=numRows-2;j>=1 && index<s.length() ; j--){//注意这里j是从倒数第二个到第二个
sb[j].append(s.charAt(index));
index++;
}
}
for(int i=1;i<numRows;i++){
sb[0].append(sb[i]);//StringBuilder之间相加
}
return sb[0].toString();//StringBuilder转String
}
}