这题一上来,直接把我看懵逼了。半天才搞懂zigzag是真的就是按z字型的意思
Solution 1: 暴力解法
把下一次上一次的这种路线当成一个循环体
设置f为direction的标志,f=0表示向下,f=1表示斜着向上
m是存整个路径的矩阵,首先初始化为0
class Solution {
public String convert(String s, int numRows) {
if(s==null||s.length()<=0) return "";
char []a=s.toCharArray() ;
int i=0;
int c=0;
int f=0;
int j=0;
int ml=0;
if(numRows!=1)
ml=a.length*(numRows-1)/(numRows-1)+numRows-1;
else
return s;
char [][]m=new char[numRows][ml];
for(i=0;i<numRows;i++){
for(j=0;j<ml;j++){
m[i][j]='0';
}
}
i=0;
while(i<a.length){
if(f==0){
j=0;
while(j<numRows&&i<a.length){ //首先向下,长度是numrows
m[j][c]=a[i];
i++;
j++;
}
f=1;//然后转换标志位,接下来向上
}
if(f==1){
j--; //上面哪个while循环退出来后j比最底端的还要大1,所以j-1就到最底端
j--; // j变成斜向上的第一个的行
c++;
int k=0;
for(k=0;k<numRows-2;k++){
if(i<a.length&&j>=0){
m[j][c]=a[i]; //一直斜着向右上,就是行--,列++
j--;
c++;
}
i++;
}
f=0; //一组过后,又开始下一组,所以把direction标志变成向下
}
}
StringBuffer res=new StringBuffer();
for(i=0;i<numRows;i++){
for(j=0;j<ml;j++){
if(m[i][j]!='0'){
res.append(m[i][j]);
}
}
}
return res.toString();
}
}