题目:
解题思路:这个题目是简单题,但是其中也隐含了一些有意思的细节问题,题目本身的意思是按照给定的行数把字符串分拆成折线的形式,横向输出。 看着这个题目,很自然的想到了用二维数组来解决这个问题,添加的顺序基本上有两类。
- 第一类是向下的按个添加
- 第二类的向右上添加
所以,在程序中需要有一个标志位来标示下一个字母的添加方向,如果是向下的话,当前左边的X坐标不变,y+1就好。 如果是向右上添加的话,x-1,y+1即可。 思路本身很好实现。
public String convert(String s, int numRows) {
if(s==null||s.equals("")) return s;
boolean flag = true;
int m =0,n=0;
int wight=s.length();
if(wight<1) wight=1;
String arr[][] = new String[numRows][wight];
for(int x=0;x<numRows;x++){
for(int y=0;y<wight;y++){
arr[x][y]="*";
}
}
int temp =s.length();
for(int i=0;i<temp;i++){
if(flag){
arr[m][n]=s.substring(0,1);
s=s.substring(1);
if(m==numRows-1){
flag=false;
m--;
}
m++;
}else{
m--;
n++;
arr[m][n]=s.substring(0,1);
s=s.substring(1);
if(m==0) {
m++;
flag=true;
}
}
}
String result="";
for(int x=0;x<numRows;x++){
for(int y=0;y<wight;y++){
if(arr[x][y]!=null&&!"*".equals(arr[x][y]))
result+=arr[x][y];
}
}
for(int x=0;x<numRows;x++){
for(int y=0;y<wight;y++){
System.err.print(arr[x][y]+" ");
}
System.err.println("");
}
return result;
}
可以通过,但是,这里却有个小的问题,就是数组定义的问题 第一个维度不用说,明显是指给定的行数,我们需要找到的是列数与行数和字符串长度之间的关系。