这道题很好做,声明一个二维数组,然后初始化,像题干中给的那样把值放入数组,然后再把二维数组降阶存即可。
但是我还是踩坑了。
1.当s.length() < numRow 的时候,此时只有一列,所以直接返回s即可。
比如他给我的案例是 s = "A",numRow = 2;结果应为A,我的是"\u0000",eclipse显示空格。所以要加上这个判断。
2.当numRow <=1 的时候,此时只有一行,所以直接返回s即可。
3.注意是“之字形的排列”,zigzag pattern。
剩下的就好做啦。
但是我还是踩坑了。
1.当s.length() < numRow 的时候,此时只有一列,所以直接返回s即可。
比如他给我的案例是 s = "A",numRow = 2;结果应为A,我的是"\u0000",eclipse显示空格。所以要加上这个判断。
2.当numRow <=1 的时候,此时只有一行,所以直接返回s即可。
3.注意是“之字形的排列”,zigzag pattern。
剩下的就好做啦。
以下是我的代码:
class Solution {
public String convert(String s, int numRows) {
if( s == ""|| s.length() <= numRows || numRows <= 1)
return s;
char cs[] = s.toCharArray();
int xiexian = numRows - 2;
int hang = 0;
/*算行数*/
for( int i = s.length(); i > 0; ){
i -= numRows;
hang++;
for( int j = 0; j < xiexian && i > 0; j++){
hang++;
i--;
}
}
/*二维数组初始化*/
char[][] c= new char[hang][numRows];
for( int i = 0; i < hang; i++)
for( int j = 0; j < numRows; j++)
c[i][j] = ' ';
/*二维数组添加元素*/
int count = 0;
for( int i = 0; i < hang; ){
/*竖线*/
for( int j = 0; j < numRows && count < s.length(); j++){
c[i][j] = cs[count];
count++;
}
/*斜线*/
i++;
for( int j = numRows - 2; j > 0 && count < s.length(); j--){
c[i][j] = cs[count];
count++;
i++;
}
}
/*二维数组转化为字符串*/
char ans[] = new char[s.length()];
int anc = 0;
for( int j = 0; j < numRows; j++){
for( int i = 0; i < hang; i++){
if( c[i][j] != ' '){
ans[anc] = c[i][j];
anc++;
}
}
}
String d = "";
for( int i =0; i < s.length(); i++){
d += ans[i];
}
return d;
}
}