法一:根据坐标关系进行求解;
class Solution {
public String convert(String s, int numRows) {
if(numRows==1)
return s;
String result="";
int count=numRows+numRows-2;
int flag1=count;
int flag2=0;
for(int i=0;i<numRows;i++){
for(int j=0;j<s.length();j++){
if(j%count==flag1||j%count==flag2)
result+=s.charAt(j);
}
flag1--;
flag2++;
}
return result;
}
}
法二:根据临界条件进行判断,即到达最后一个和第一个是进行方向的改变
class Solution {
public String convert(String s, int numRows) {
if(numRows==1)
return s;
String result="";
List<StringBuilder> list=new ArrayList<StringBuilder>();
for(int i=0;i<numRows;i++)list.add(new StringBuilder());
int flag=1;
int now=0;
for(int j=0;j<s.length();j++){
list.get(now).append(s.charAt(j));
now+=flag;
if(now==numRows-1||now==0){
flag=-flag;
}
}
for(StringBuilder b:list) {
result += b.toString();
}
return result;
}
}